🔎
[Django] ORMで実行されたSQLを確認する
ORMで実装していると意図しないSQLが実行されている時があります。
そこで実際に実行されているSQLの確認方法を調査しました。
前準備
base.py
でSQLをコンソール出力できる形に準備します。
-
DEBUG=Trueにする。
-
django.db.backends
の項目を以下の形に設定する。# SQLログ 'django.db.backends': { # 'handlers': ['sqllog'], 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, },
確認方法
connection.queries
から実行SQLを確認することができます。
from django.db import connection
print(connection.queries)
もしくは
for history in connection.queries:
print(history)
以下のように実行SQLと実行時間が確認できます。
{
'sql': 'SELECT ... FROM fdt WHERE c1 > 5',
'time': '0.029'
}
最後に
ORMは直感的に操作ができて便利ですが、外部キーなどを意識しないとパフォーマンスに影響が出てきます。
使用したORMのメソッドと出力されたSQLを比較して、
意図したデータベース操作が行われているか意識しながら実装していきたいです。
参考URL
FAQ: データベースとモデル | Django が実行している生の SQL クエリを見られますか? | Django ドキュメント | Django
Discussion