269 votos

Recibiendo el SQL de un Django QuerySet

¿Cómo obtengo el SQL que utilizará en la base de datos de un objeto QuerySet Django? Estoy tratando de depurar algunos comportamientos extraños, pero no estoy seguro de lo que van las consultas a la base de datos. Gracias por tu ayuda.

401voto

jpwatts Puntos 2671

Imprimir la queryset query atributo.

>>> queryset = MyModel.objects.all()
>>> print queryset.query
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"

50voto

Mike Axiak Puntos 6349

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 cabe mencionar que si tienes DEBUG = True, entonces todas sus preguntas se registran, y tú puedes hacerlo accediendo a connection.queries:

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

El proyecto django barra de herramientas de depuración utiliza esto para presentar las consultas en una página de una manera ordenada.

39voto

Hakan B. Puntos 656

Esta respuesta no funcionó para mí cuando usando Django 1.4.4. En lugar de la consulta de crudo, fue devuelto una referencia al objeto de consulta: <django.db.models.sql.query.Query object at 0x10a4acd90> .

La consulta devuelve lo siguiente:

>>> queryset = MyModel.objects.all()
>>> queryset.query.__str__()

9voto

Tomasz Zielinski Puntos 9300

Como alternativa a las otras respuestas, django-devserver salidas de SQL a la consola.

9voto

Guillaume Esquevin Puntos 1990

Este middleware es la salida de cada consulta SQL a tu consola, con color de resaltado y tiempo de ejecución, ha sido muy valiosa para mí en la optimización de algunas peticiones difíciles

http://djangosnippets.org/Snippets/290/

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: