2019/07/20
Django モデル クエリセット SQL デバッグ django-debug-toolbar【Django】 クエリセットで発行されるSQL文を確認する
Djangoのクエリセットによって、どのようなSQL文が実行されるかを確認する方法です。
方法はいくつかありますが、2つ紹介します。
1. QuerySetに.query
をつける
1つ目は手軽にできる方法です。
QuerySetの末尾に.query
とつけてprint
するだけで、SQL文を確認できます。
.queryでSQL文を確認する
>>> print(Person.objects.all().query)
SELECT "app_person"."id", "app_person"."name" FROM "app_person"
>>> print(Person.objects.filter(name='Jobs').values('id').query)
SELECT "app_person"."id" FROM "app_person" WHERE "app_person"."name" = Jobs
2. django-debug-toolbarを使う
django-debug-toolbarというライブラリを使います。
ドキュメント通りにインストールしてセットアップすると、画面横にデバッグ用のバーが表示されます。
views.py
def people(request):
people = Person.objects.all()
return render(request, 'index.html', {'people':people})
index.html
<body>
{{ people }}
</body>
上のようなコードがあったとして、127.0.0.1:8000/people
にアクセスします。
そしてツールバーのSQLを選択すると、以下のような画面が表示されます。この画面では、アクセスしたページを表示する際に実行されたSQL文を全て確認することができます。
django-debug-toolbarを使うときは、いくつか注意点があります。もちろん全てドキュメントに記載してありますが、簡単にまとめるとこんな感じです。
- Debug=Trueの時しか使えない
- htmlでbodyタグを使っている必要がある
- INSTALLED_APPS, URL, MIDDLEWARE, INTERNAL_IPSの設定が必要