How do I get the SQL that Django will use on the database from a QuerySet object? I’m trying to debug some strange behavior, but I’m not sure what queries are going to the database.
You print the queryset’s
>>> queryset = MyModel.objects.all() >>> print(queryset.query) SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
The accepted answer did not work for me when using Django 1.4.4. Instead of the raw query, a reference to the Query object was returned:
<django.db.models.sql.query.Query object at 0x10a4acd90>.
The following returned the query:
>>> queryset = MyModel.objects.all() >>> queryset.query.__str__()
from django.contrib.auth.models import User print User.objects.filter(last_name__icontains="ax").query
It should also be mentioned that if you have DEBUG = True, then all of your queries are logged, and you can get them by accessing connection.queries:
from django.db import connections connections['default'].queries
The django debug toolbar project uses this to present the queries on a page in a neat manner.
This middleware will output every SQL query to your console, with color highlighting and execution time, it’s been invaluable for me in optimizing some tricky requests