FAQ: データベースとモデル

Django が実行している生の SQL クエリを見られますか?

Djangoの設定ファイルの DEBUGTrue になっていることを確認します。次に、以下のコードを実行します:

>>> 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.queriesDEBUGTrue の場合のみに、利用することができます。これはクエリの実行順に辞書を並べたリストです。各辞書には以下の項目が入っています:

``sql`` -- The raw SQL statement
``time`` -- How long the statement took to execute, in seconds.

connection.queries にはINSERT, UPDATE, 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 ユーティリティの flush オプションを利用することで、データベースを migrate コマンドが実行された直後と同じ状態にすることができます。

Django のモデルは複合主キーをサポートしますか?

いいえ。単一の主キーのみをサポートします。

But this isn't an issue in practice, because there's nothing stopping you from adding other constraints (using the unique_together model option or creating the constraint directly in your database), and enforcing the uniqueness at that level. Single-column primary keys are needed for things such as the admin interface to work; e.g., you need a simple way of being able to specify an object to edit or delete.

Django で NoSQL データベースは利用できますか?

NoSQL データベースは Django で公式にはサポートされていません。しかし、Django non-rel など、多くのプロジェクトが NoSQL を Django で利用できるような機能を提供しています。

いくつかの代替手段については the wiki page を参照してください。

How do I add database-specific options to my CREATE TABLE statements, such as specifying MyISAM as the table type?

We try to avoid adding special cases in the Django code to accommodate all the database-specific options such as table type, etc. If you'd like to use any of these options, create a migration with a RunSQL operation that contains ALTER TABLE statements that do what you want to do.

For example, if you're using MySQL and want your tables to use the MyISAM table type, use the following SQL:

ALTER TABLE myapp_mytable ENGINE=MyISAM;
Back to Top