Get SQL query count during a Django shell session Get SQL query count during a Django shell session django django

Get SQL query count during a Django shell session


You can use connection.queries:

>>> from django.conf import settings>>> settings.DEBUG = True>>> from django.db import connection>>> Model.objects.count()>>> print(len(connection.queries))1


This is a slight improvement on the accepted answer. create a python file named extra_imports.py in some app (Eg some_app)

extra_imports.py

from django.conf import settingssettings.DEBUG = Truefrom django.db import connection, reset_queriesdef num_queries(reset=True):    print(len(connection.queries))    if reset:        reset_queries()

Now, If you are using shell_plus from django_extension (btw check it out if you are not using it), add following line to settings.py

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

If you are using django shell, run this inside shell

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

Now,

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


If you have database routing and multiple connections, it's a bit trickier to count your database hits because connection.queriesconsiders only the default connection, as far as I can tell.

To include all connections:

from django.db import connections,connection,reset_queriesfrom django.conf import settingssettings.DEBUG = True...def query_count_all()->int:    query_total = 0    for c in connections.all():        query_total += len(c.queries)    return query_total

or more concisely:

def query_count_all()->int:   return sum(len(c.queries) for c in connections.all())

reset_queries() already handles multiple connections