Getting the SQL from a Django QuerySet [duplicate]
This question already has answers here: How can I see the raw SQL queries Django is running? (13 answers) Closed 5 years ago. 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. Thanks for your help.
You print the queryset’s
>>> queryset = MyModel.objects.all() >>> print(queryset.query) SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
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.
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__()
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
As an alternative to the other answers, django-devserver outputs SQL to the console.
- Database Administration Tutorials
- Programming Tutorials & IT News
- Linux & DevOps World
- Entertainment & General News
- Games & eSport