Obtener el SQL de un QuerySet de Django [duplicar]


Esta pregunta ya tiene una respuesta aquí:

¿Cómo obtengo el SQL que Django usará en la base de datos desde un objeto QuerySet? Estoy tratando de depurar algún comportamiento extraño, pero no estoy seguro de qué consultas van a la base de datos. Gracias por tu ayuda.

Author: exupero, 2010-09-20

5 answers

Se imprime el atributo query del queryset.

>>> queryset = MyModel.objects.all()
>>> print queryset.query
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
 354
Author: jpwatts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-20 02:17:52

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 debe mencionarse que si tiene DEBUG = True, entonces todas sus consultas se registran, y puede obtenerlas accediendo a la conexión.consultas:

from django.db import connections
connections['default'].queries

El proyecto django debug toolbar usa esto para presentar las consultas en una página de una manera ordenada.

 49
Author: Mike Axiak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-20 02:54:26

La respuesta aceptada no funcionó para mí cuando usé Django 1.4.4. En lugar de la consulta sin procesar, se devolvió una referencia al objeto de consulta: <django.db.models.sql.query.Query object at 0x10a4acd90>.

Lo siguiente devolvió la consulta:

>>> queryset = MyModel.objects.all()
>>> queryset.query.__str__()
 31
Author: Hakan B.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:37

Este middleware emitirá cada consulta SQL a su consola, con resaltado de color y tiempo de ejecución, ha sido invaluable para mí en la optimización de algunas solicitudes complicadas

Http://djangosnippets.org/snippets/290 /

 9
Author: Guillaume Esquevin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-20 10:24:40

Como alternativa a las otras respuestas, django-devserver envía SQL a la consola.

 8
Author: Tomasz Zielinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-03 16:23:23