FAQ:データベースとモデル
Djangoが実行している生のSQLクエリを確認するにはどうすればよいですか?
Django :setting: `DEBUG` 設定がTrue
に設定されていることを確認してください。 次に、これを行います。
>>> from django.db import connection
>>> connection.queries
[{'sql': 'SELECT polls_polls.id, polls_polls.question, polls_polls.pub_date FROM polls_polls',
'time': '0.002'}]
connection.queries
は、:setting: `DEBUG` がTrue
の場合にのみ使用できます。 これは、クエリ実行順の辞書のリストです。 各辞書には次のものがあります。
``sql`` -- The raw SQL statement
``time`` -- How long the statement took to execute, in seconds.
connection.queries
には、INSERT、UPDATES、SELECTなどのすべてのSQLステートメントが含まれます。 アプリがデータベースにアクセスするたびに、クエリが記録されます。
複数のデータベースを使用している場合は、connections
ディクショナリの各メンバーで同じインターフェイスを使用できます。
>>> from django.db import connections
>>> connections['my_db_alias'].queries
関数の任意の時点でクエリリストを手動でクリアする必要がある場合は、次のようにreset_queries()
を呼び出します。
from django.db import reset_queries
reset_queries()
モデルに変更を加えた場合、データベースを更新するにはどうすればよいですか?
スキーマ移行に対するDjangoのサポートをご覧ください。
データの消去を気にしない場合は、プロジェクトのmanage.py
ユーティリティに:djadmin: `flush` オプションがあり、データベースを:djadminの直後の状態にリセットします。 : `migrate` が実行されました。
Djangoモデルは複数列の主キーをサポートしていますか?
いいえ。 単一列の主キーのみがサポートされています。
ただし、これは実際には問題ではありません。他の制約を追加し(unique_together
モデルオプションを使用するか、データベースに直接制約を作成する)、そのレベルで一意性を適用することを妨げるものは何もないからです。 管理インターフェースなどが機能するには、単一列の主キーが必要です。 たとえば、編集または削除するオブジェクトを指定するには、単一の値が必要です。
DjangoはNoSQLデータベースをサポートしていますか?
NoSQLデータベースは、Django自体では公式にはサポートされていません。 ただし、DjangoでNoSQL機能を可能にするサイドプロジェクトとフォークがいくつかあります。
いくつかのプロジェクトについて説明している wikiページをご覧ください。
テーブルタイプとしてMyISAMを指定するなど、CREATE TABLEステートメントにデータベース固有のオプションを追加するにはどうすればよいですか?
テーブルタイプなど、データベース固有のすべてのオプションに対応するために、Djangoコードに特別なケースを追加しないようにしています。 これらのオプションのいずれかを使用する場合は、 RunSQL 操作を使用して移行を作成します。この操作には、実行したいことを実行するALTER TABLE
ステートメントが含まれます。
たとえば、MySQLを使用していて、テーブルでMyISAMテーブルタイプを使用する場合は、次のSQLを使用します。
ALTER TABLE myapp_mytable ENGINE=MyISAM;