🔎

[Django] ORMで実行されたSQLを確認する

2023/02/03に公開

ORMで実装していると意図しないSQLが実行されている時があります。

そこで実際に実行されているSQLの確認方法を調査しました。

前準備

base.pyでSQLをコンソール出力できる形に準備します。

  1. DEBUG=Trueにする。

  2. 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