python - select_related - Obteniendo el SQL de un Django QuerySet
select django (5)
Como alternativa a las otras respuestas, django-devserver envía SQL a la consola.
Esta pregunta ya tiene una respuesta aquí:
¿Cómo obtengo el SQL que Django usará en la base de datos de un objeto QuerySet? Estoy intentando depurar algún comportamiento extraño, pero no estoy seguro de qué consultas van a la base de datos. Gracias por tu ayuda.
Este middleware emitirá todas las consultas SQL a su consola, con resaltado de color y tiempo de ejecución, ha sido de gran valor para mí en la optimización de algunas solicitudes difíciles.
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 registrarán y podrá obtenerlas accediendo a connection.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 una manera ordenada.
Imprime el atributo de query
del queryset.
>>> queryset = MyModel.objects.all()
>>> print queryset.query
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
La respuesta aceptada no me funcionó cuando uso Django 1.4.4. En lugar de la consulta sin <django.db.models.sql.query.Query object at 0x10a4acd90>
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__()