Django ORMが生成しているクエリを印刷する方法はありますか?
次の文を実行するとします:Model.objects.filter(name='test')
生成されたSQLクエリを表示するにはどうすればよいですか?
各QuerySetオブジェクトにはquery
属性があり、デバッグのためにログに記録したり、stdoutに出力したりできます。
qs = Model.objects.filter(name='test')
print qs.query
編集
また、カスタムテンプレートタグ( this snippet で概説)を使用して、単一のリクエストのスコープ内にクエリをHTMLコメントとして挿入しました。
pythonロギングを使用して、Djangoによって生成されたすべてのクエリを記録することもできます。これを設定ファイルに追加するだけです。
LOGGING = {
'disable_existing_loggers': False,
'version': 1,
'handlers': {
'console': {
# logging handler that outputs log messages to terminal
'class': 'logging.StreamHandler',
'level': 'DEBUG', # message level to be written to console
},
},
'loggers': {
'': {
# this sets root level logger to log debug and higher level
# logs to console. All other loggers inherit settings from
# root level logger.
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False, # this tells logger to send logging message
# to its parent (will send if set to True)
},
'Django.db': {
# Django also has database level logging
},
},
}
アプリケーションがHTML出力を生成する場合の別の方法- Django debug toolbar を使用できます。
すべてのSQLクエリを表示するインタープリターにこのコードを貼り付けることができます。
# To get all sql queries sent by Django from py Shell
import logging
l = logging.getLogger('Django.db.backends')
l.setLevel(logging.DEBUG)
l.addHandler(logging.StreamHandler())
DEBUG
がオンである限り:
from Django.db import connection
print(connection.queries)
個々のクエリについて、次のことができます。
print(Model.objects.filter(name='test').query)
Django-debug-toolbar
アプリケーションを見てください。すべてのクエリがログに記録され、プロファイリング情報が表示されます。
堅牢なソリューションは、データベースサーバーがファイルにログを記録してから、
tail -f /path/to/the/log/file.log
Django debug_toolbarを使用して、SQLクエリを表示できます。 debug_toolbarの使用方法のステップバイステップガイド:
pip install Django-debug-toolbar
Settings.py =>
INSTALLED_APPS= [ 'debug_toolbar']
MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware']
Settings.py => settings.pyファイルの最後に新しいリストを作成し、リストの下に追加します:
INTERNAL_IPS= [127.0.0.1']
これにより、内部開発サーバーでのみデバッグを実行できます
if settings.DEBUG:
import debug_toolbar
urlpatterns = [
url(r'^__debug__/', include(debug_toolbar.urls))
] + urlpatterns
127.0.0.1のWebページにアドオンが表示されます。[SQLクエリ]チェックボックスをクリックすると、クエリの実行時間も実際に確認できます。