Django高速化|実行された生のSQLクエリを確認する方法
- 公開日:2020/04/16
- 更新日:2020/04/16
- 投稿者:n bit
Djangoで実行されたSQLクエリのRAWデータを確認する方法について解説。Djangoの実行処理を高速化するためにはまずSQLクエリの確認から始めるのがコツ。
この記事は約 分で読めます。(文字)
多量のデータなどを処理すると途端にDjangoアプリケーションの実行速度が落ちてきます。大半の原因は無駄なSQLクエリの発行。
そこで今回は、まずどのようなSQLクエリが発行されているのかを実際に実行された生のSQLクエリを見て確認する方法について解説していきます。
connection.queriesで生のSQLクエリを確認
Djangoで生のSQLクエリ実行も確認するために利用するのはconnection.queries。
- connection.queries
connection.queriesを利用すると実際に発行されたSQL文とその実行にかかった時間を取得することができます。
- ‘sql’: ’SELECT “django_session”.“session_key”, ・・・
- ‘time’: ‘0.002’
1点気をつけておくことはconnection.queriesを利用するときDEBUGのセッティングが【True】になっていないと利用できません。最初にsettings.pyからでDEBUGの設定を変更しておきましょう。
DEBUG = True
connection.queriesを利用するためインポートしておく必要があります。下記一行をファイル内に追記してインポート。
from django.db import connection
インポート後connection.queriesで生のSQLクエリを取得。for文で回して表示させます。表示方法については、自分の利用環境に合わせて適宜変更してください。
for q in connection.queries:
print(q)
出力
正しく取得できていれば、下記のように表示されます。
{'sql': 'SELECT "user"."id",
・・・
, 'time': '0.000'}
ちなみに、1回のqueryset取得毎のSQL文RAWデータを確認する場合は下記のコードでも取得することができます。
print(ModelName.objects.filter(id__in=id_list).query)
出力
SELECT "appname_modelname"."id", ・・・ ASC
個別で取得した場合実行時間は取得されません。
今日のdot
今回はDjangoで実行されたSQLクエリのRAWデータ確認方法について解説しました。解説したのは2つの方法。それぞれの用途にあわせて使い分けてください。