FAQ:データベースとモデル—Djangoのドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/faq/models
移動先:案内検索

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を既存のデータベースで使用できますか?

はい。 レガシーデータベースとの統合を参照してください。


モデルに変更を加えた場合、データベースを更新するにはどうすればよいですか?

スキーマ移行に対する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;