web-dev-qa-db-ja.com

Django ORMのクエリセットの対応するSQLクエリを表示する方法は?

Django ORMが生成しているクエリを印刷する方法はありますか?

次の文を実行するとします:Model.objects.filter(name='test')

生成されたSQLクエリを表示するにはどうすればよいですか?

147
DjangoNewbe

各QuerySetオブジェクトにはquery属性があり、デバッグのためにログに記録したり、stdoutに出力したりできます。

qs = Model.objects.filter(name='test')
print qs.query

編集

また、カスタムテンプレートタグ( this snippet で概説)を使用して、単一のリクエストのスコープ内にクエリをHTMLコメントとして挿入しました。

160
Joe Holloway

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 を使用できます。

111
aisbaa

すべての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())
101
Pramod

DEBUGがオンである限り:

from Django.db import connection
print(connection.queries)

個々のクエリについて、次のことができます。

print(Model.objects.filter(name='test').query)
68
Daniel Roseman

Django-debug-toolbarアプリケーションを見てください。すべてのクエリがログに記録され、プロファイリング情報が表示されます。

29
Mikhail Korobov

堅牢なソリューションは、データベースサーバーがファイルにログを記録してから、

tail -f /path/to/the/log/file.log
2
alan

Django debug_toolbarを使用して、SQLクエリを表示できます。 debug_toolbarの使用方法のステップバイステップガイド:

Debug_toolbarをインストールします

pip install Django-debug-toolbar

Settings.pyファイルを編集して、インストールされたアプリにdebug_toolbarを追加します。これは、「Django.contrib.staticfiles」に追加する必要があります。また、debug_toolbarをミドルウェアに追加します。

Settings.py =>

INSTALLED_APPS= [ 'debug_toolbar'] 

MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware']

settings.pyファイルにINTERNAL_IPSという名前の新しいリストを作成します

Settings.py => settings.pyファイルの最後に新しいリストを作成し、リストの下に追加します:

INTERNAL_IPS= [127.0.0.1']

これにより、内部開発サーバーでのみデバッグを実行できます

#Projectのurls.pyファイルを編集し、以下のコードを追加します。

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
    url(r'^__debug__/', include(debug_toolbar.urls))       
    ] + urlpatterns

サーバーの移行と実行を再度適用します

127.0.0.1のWebページにアドオンが表示されます。[SQLクエリ]チェックボックスをクリックすると、クエリの実行時間も実際に確認できます。

1
Devesh G