web-dev-qa-db-fra.com

Obtenir le nombre de requêtes SQL au cours d'une session Shell Django

Est-il possible d'imprimer le nombre de requêtes SQL brutes effectuées par l'ORM de Django au cours d'une session Shell Django?

Ce type d’information est déjà fourni par la barre d’outils de débogage de Django (par exemple, 5 QUERIES in 5.83MS, mais il n’est pas évident de l’obtenir à partir du shell.

30
Jian

Vous pouvez utiliser 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
53
Jian

C'est une légère amélioration par rapport à la réponse acceptée. créer un fichier python nommé extra_imports.py dans une application (par exemple 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()

Maintenant, si vous utilisez Shell_plus de Django_extension (d'ailleurs, vérifiez-le si vous ne l'utilisez pas), ajoutez la ligne suivante à settings.py

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

Si vous utilisez Django Shell, lancez-le dans Shell

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

À présent, 

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