回答:
各QuerySetオブジェクトには、query
デバッグのためにstdoutに記録または出力できる属性があります。
qs = Model.objects.filter(name='test')
print qs.query
編集する
また、カスタムスニペットタグ(このスニペットで概説)を使用して、単一のリクエストのスコープにクエリをHTMLコメントとして挿入しました。
prefetch_related
、すなわち2つのクエリを示して?1のみが表示されます
<django.db.models.sql.query.Query object
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デバッグツールバーを使用できます。
'level': 'DEBUG'
下'django.db'
。
である限りDEBUG
:
from django.db import connection
print(connection.queries)
個々のクエリに対して、次のことができます。
print(Model.objects.filter(name='test').query)
データベースルーティングを使用している場合、おそらく複数のデータベース接続があります。このようなコードを使用すると、セッションの接続を確認できます。単一の接続の場合と同じ方法で統計をリセットできます。reset_queries()
from django.db import connections,connection,reset_queries
...
reset_queries() # resets data collection, call whenever it makes sense
...
def query_all():
for c in connections.all():
print(f"Queries per connection: Database: {c.settings_dict['NAME']} {c.queries}")
# and if you just want to count the number of queries
def query_count_all()->int:
return sum(len(c.queries) for c in connections.all() )
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クエリ]チェックボックスをクリックすると、クエリの実行時間も実際に確認できます。