DjangoBrothers BLOG

2019/07/20

このエントリーをはてなブックマークに追加
Django モデル クエリセット SQL デバッグ

【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の設定が必要
SHARE ! Tweet