web-dev-qa-db-ja.com

Django QuerySetからSQLを取得する

Djangoがデータベースで使用するSQLをQuerySetオブジェクトから取得するにはどうすればよいですか?奇妙な動作をデバッグしようとしていますが、どのクエリがデータベースに送信されるのかわかりません。ご協力いただきありがとうございます。

264
exupero

クエリセットのquery属性を印刷します。

>>> queryset = MyModel.objects.all()
>>> print(queryset.query)
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
394
jpwatts

簡単:

print my_queryset.query

例えば:

from Django.contrib.auth.models import User
print User.objects.filter(last_name__icontains = 'ax').query

DEBUG = Trueの場合、すべてのクエリがログに記録され、connection.queriesにアクセスして取得できることにも注意してください。

from Django.db import connections
connections['default'].queries

Djangoデバッグツールバー プロジェクトはこれを使用して、ページにクエリをきれいに表示します。

50
Mike Axiak

受け入れられた答え Django 1.4.4を使用しているとき、私にとってはうまくいきませんでした。生のクエリの代わりに、Queryオブジェクトへの参照が返されました:<Django.db.models.sql.query.Query object at 0x10a4acd90>

以下はクエリを返しました:

>>> queryset = MyModel.objects.all()
>>> queryset.query.__str__()
35
Hakan B.

他の回答の代替として、 Django-devserver はコンソールにSQLを出力します。

9

このミドルウェアは、すべてのSQLクエリをコンソールに出力します。色の強調表示と実行時間は、トリッキーなリクエストを最適化する上で非常に貴重です

http://djangosnippets.org/snippets/290/

9