Django高速化|実行された生のSQLクエリを確認する方法のイメージ画像

Django高速化|実行された生のSQLクエリを確認する方法

  • 公開日:2020/04/16
  • 更新日:2020/04/16
  • 投稿者:n bit

Djangoで実行されたSQLクエリのRAWデータを確認する方法について解説。Djangoの実行処理を高速化するためにはまずSQLクエリの確認から始めるのがコツ。

  • Python
  • Django
  • プログラミング学習

この記事は約 分で読めます。(文字)

多量のデータなどを処理すると途端に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つの方法。それぞれの用途にあわせて使い分けてください。