¿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 van a la base de datos. Gracias por tu ayuda.Obtener el SQL de un Django QuerySet
Respuesta
DE IMPRIMIR atributo del conjunto de consultas query
.
>>> queryset = MyModel.objects.all()
>>> print queryset.query
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
me encontré [esto] (https://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/#automatic-spatial-transformations) que menciona implícitamente pero nada que documenta explícitamente lo anterior – hanleyhansen
Tenga en cuenta que el resultado de 'query' no es SQL válido, porque" Django nunca interpola los parámetros: envía la consulta y los parámetros por separado al adaptador de la base de datos, que realiza las operaciones apropiadas ". Fuente: https://code.djangoproject.com/ticket/17741 – gregoltsov
donde tengo que escribir la consulta ... MyModel es una clase que está en el archivo models.py ... Mi duda es donde tengo que escribir la consulta sql para recupera el valor de la tabla. –
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 hay que mencionar que si usted tiene debug = true, entonces todas sus consultas son grabadas, y se puede consígalos accediendo a connection.queries:
from django.db import connections
connections['default'].queries
El proyecto django debug toolbar utiliza esto para presentar las consultas en una página de una manera ordenada.
Esto no siempre arroja un SQL válido, vea las otras respuestas – aehlke
No hay forma de obtener el SQL real sin ejecutar la consulta primero, SQL final es generado por el controlador RDBMS circundante, no por Django. La respuesta es correcta, ya que es lo máximo que puedes obtener con Django QuerySet. – danigosa
Este middleware salida de todas las consultas SQL a la consola, con resaltado de color y tiempo de ejecución, ha sido de gran valor para mí en la optimización de algunas peticiones difíciles
Como alternativa a las otras respuestas, django-devserver salidas SQL a la consola.
The accepted answer no funcionó para mí cuando se utiliza Django 1.4.4. En lugar de la consulta sin formato, se devolvió una referencia al objeto Query: <django.db.models.sql.query.Query object at 0x10a4acd90>
.
El siguiente volvieron la consulta:
>>> queryset = MyModel.objects.all()
>>> queryset.query.__str__()
Probablemente no funcionó porque acabas de escribir 'queryset.query' en lugar de' print queryset.query', que llama a '__str __()' – hughes
@hughes tiene razón. Si no desea imprimirlo y lo quiere como una cadena, en lugar de llamar '__str __()' para obtenerlo como una cadena, debe hacer 'str (queryset.query)'. – Chad
Estoy usando ipdb para depurar e imprime una referencia al objeto de consulta cuando hago 'p queryset'. 'p queryset .__ str __()' produce el resultado deseado por lo que esta es una mejor respuesta. – Rafay
- 1. impresión Django QuerySet SQL con ""
- 2. Django: inspeccionar queryset para obtener filtros aplicados
- 3. ¿Qué es un django QuerySet?
- 4. ¿Cómo obtener la siguiente fila en un queryset django?
- 5. Orden Django QuerySet
- 6. Ver las consultas SQL para Django queryset delete
- 7. búsqueda rápida para el último elemento en un Django QuerySet?
- 8. Django - Lista única de QuerySet
- 9. Cómo filtrar un queryset django utilizando una matriz en un campo como "IN" de SQL?
- 10. Filtros de Django Custom Queryset
- 11. Django: filtro para get_foo_display en un Queryset
- 12. django - pidiendo queryset por un campo calculado
- 13. Cómo usar django annotate() y aggregate() para agrupar un queryset?
- 14. Filtra un QuerySet de django con la consulta de otro QuerySet: ¿posible?
- 15. ¿Puedo obtener el tipo de campo de modelo de un queryset modelo en Django?
- 16. Django obtener un QuerySet de serie de identificadores con el fin específico de
- 17. ¿Cómo comparar el valor de 2 campos en Django QuerySet?
- 18. Django queryset de actualización con la anotación
- 19. Filter Queryset en Django inlineformset_factory
- 20. Django QuerySet filter + order_by + limit
- 21. Modificar queryset predeterminado en django
- 22. Django filter on queryset intersection?
- 23. Llamar a Django guardar en un objeto QuerySet - El objeto 'QuerySet' no tiene ningún atributo 'guardar'
- 24. ¿Cómo creo un queryset Django equivalente a una consulta SQL usando el operador OR?
- 25. Django queryset con la filtración en el reverso clave externa
- 26. En Django QuerySet, ¿cómo hago la negación en el filtro?
- 27. Pedido personalizado Django QuerySet por ID
- 28. crear manualmente un Django QuerySet o más bien manualmente agregar objetos a un QuerySet
- 29. Comprobación de queryset vacío en Django
- 30. Problema Django QuerySet .defer() - ¿error o característica?
Esto no es un duplicado. la pregunta vinculada es un tema bastante diferente. – craigds