Obtener el SQL de un Django QuerySet

Resuelto exupero asked hace 14 años • 5 respuestas

¿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.

exupero avatar Sep 20 '10 09:09 exupero
Aceptado

Imprime el queryatributo del conjunto de consultas.

>>> queryset = MyModel.objects.all()
>>> print(queryset.query)
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
jpwatts avatar Sep 20 '2010 02:09 jpwatts

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.

Mike Axiak avatar Sep 20 '2010 02:09 Mike Axiak

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__()
Hakan B. avatar Mar 02 '2013 01:03 Hakan B.

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/

Guillaume Esquevin avatar Sep 20 '2010 10:09 Guillaume Esquevin

Como alternativa a las otras respuestas, django-devserver genera SQL en la consola.

Tomasz Zieliński avatar Aug 12 '2011 22:08 Tomasz Zieliński