Obtener el SQL de un Django QuerySet
¿Cómo obtengo el SQL que Django usará en la base de datos desde un objeto QuerySet? Estoy intentando depurar algún comportamiento extraño, pero no estoy seguro de qué consultas se envían a la base de datos.
Imprime el query
atributo del conjunto de consultas.
>>> queryset = MyModel.objects.all()
>>> print(queryset.query)
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
Fácil:
print(my_queryset.query)
Por ejemplo:
from django.contrib.auth.models import User
print(User.objects.filter(last_name__icontains = 'ax').query)
También se debe mencionar que si tiene DEBUG = True, entonces todas sus consultas se registran y puede obtenerlas accediendo a connect.queries:
from django.db import connections
connections['default'].queries
El proyecto de la barra de herramientas de depuración de Django usa esto para presentar las consultas en una página de manera ordenada.
La respuesta aceptada no me funcionó cuando usé Django 1.4.4. En lugar de la consulta sin formato, se devolvió una referencia al objeto Consulta: <django.db.models.sql.query.Query object at 0x10a4acd90>
.
Lo siguiente devolvió la consulta:
>>> queryset = MyModel.objects.all()
>>> queryset.query.__str__()
Este middleware enviará cada consulta SQL a su consola, con resaltado de color y tiempo de ejecución. Ha sido invaluable para mí a la hora de optimizar algunas solicitudes difíciles.
http://djangosnippets.org/snippets/290/
Como alternativa a las otras respuestas, django-devserver genera SQL en la consola.