web-dev-qa-db-ja.com

Django= Shellセッション中にSQLクエリカウントを取得する

Django=シェルセッション中にDjango= ORMによって実行された生のSQLクエリの数を出力する方法はありますか?

この種類の情報は、Djangoデバッグツールバー(たとえば、5 QUERIES in 5.83MSしかし、それをシェルから取得する方法は明らかではありません。

40
Jian

connection.queriesを使用できます:

>>> from Django.conf import settings
>>> settings.DEBUG = True
>>> from Django.db import connection
>>> Model.objects.count()
>>> # python 3 uses print()
>>> print(len(connection.queries))
1
64
Jian

これは、受け入れられた答えのわずかな改善です。一部のアプリでextra_imports.pyという名前のpythonファイルを作成します(例:some_app

extra_imports.py

from Django.conf import settings
settings.DEBUG = True
from Django.db import connection, reset_queries


def num_queries(reset=True):
    print(len(connection.queries))
    if reset:
        reset_queries()

Django_extensionのShell_plusを使用している場合(使用していない場合はチェックしてください)、次の行をsettings.pyに追加します

Shell_PLUS_PRE_IMPORTS = [('some_app.extra_imports', '*')]

Django Shellを使用している場合は、シェル内でこれを実行します

exec(open('some_app/extra_imports.py').read()) # python3
execfile('some_app/extra_imports.py').read()) # pyhton2

さて、

In [1]: User.objects.all()
In [2]: num_queries()
1

In [3]: User.objects.filter(company=Company.objects.first()).all()
In [4]: num_queries()
2
1
nithin