Django=シェルセッション中にDjango= ORMによって実行された生のSQLクエリの数を出力する方法はありますか?
この種類の情報は、Djangoデバッグツールバー(たとえば、5 QUERIES in 5.83MS
しかし、それをシェルから取得する方法は明らかではありません。
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
これは、受け入れられた答えのわずかな改善です。一部のアプリで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