FAQ: データベースとモデル¶
Django が実行している生の SQL クエリを見られますか?¶
Djangoの設定ファイルの 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
は DEBUG
が True
の場合のみに、利用することができます。これはクエリの実行順に辞書を並べたリストです。各辞書には以下の項目が入っています:
``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 のモデルは複合主キーをサポートしますか?¶
いいえ。単一の主キーのみをサポートします。
しかし、それは実際には問題でありません。なぜなら、(unique_together
モデルオプション追加やデータベースに直接制約を作るというような) 他の制約を追加することを妨げないし、そのレベルでユニーク性を強制しているからです。単一カラムのプライマリーキーは admin インターフェースを動かすのに必要なのです。それにより、オブジェクトの更新や削除が容易になるからです。
Django で NoSQL データベースは利用できますか?¶
NoSQL databases are not officially supported by Django itself. There are, however, a number of side projects and forks which allow NoSQL functionality in Django.
You can take a look on the wiki page which discusses some projects.
MyISAM ストレージエンジンを指定するといったような CREATE TABLE
文のデータベース固有のカスタマイズを追加するにはどうしたらよいでしょうか?¶
テーブル種別などデータベース固有のオプションに適応するために、 Django コード中に特殊なケースを追加するのを避けようとします。データベース固有のオプションを使いたければ、あなたが指定したい ALTER TABLE
文を含めた RunSQL
を使ったマイグレーションを作成してください。
たとえば、 MySQL を使っていて、 MyISAM ストレージエンジンを使いたい場合、以下のSQLを使ってください:
ALTER TABLE myapp_mytable ENGINE=MyISAM;