136👍
✅
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
👤Jian
25👍
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 settings
settings.DEBUG = True
from django.db import connection, reset_queries
def 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()) # python3
execfile('some_app/extra_imports.py').read()) # pyhton2
Or you can just paste the contents of extra_import.py
into the shell
Now,
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
- [Django]-Django Static files 404
- [Django]-How do you perform Django database migrations when using Docker-Compose?
- [Django]-Create if doesn't exist
12👍
If you have database routing and multiple connections, it’s a bit trickier to count your database hits because connection.queries
considers only the default connection, as far as I can tell.
To include all connections:
from django.db import connections,connection,reset_queries
from django.conf import settings
settings.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
- [Django]-Django SUM Query?
- [Django]-AttributeError: 'module' object has no attribute 'tests'
- [Django]-What is the purpose of adding to INSTALLED_APPS in Django?
Source:stackexchange.com