Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get SQL query count during a Django shell session

Is there a way to print the number of raw SQL queries performed by the Django ORM during a Django shell session?

This sort of information is already provided by the Django debug toolbar (e.g, 5 QUERIES in 5.83MS but it's not obvious how to get it from the shell.

like image 886
Jian Avatar asked Oct 24 '13 03:10

Jian


2 Answers

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 
like image 74
Jian Avatar answered Sep 21 '22 14:09

Jian


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 
like image 42
Nithin Avatar answered Sep 17 '22 14:09

Nithin