2010-10-07 12 views
6

¿Cómo puedo ver mis consultas django de manejar interfaz de shellDjango ¿Cómo veo consulta en gestionar la cáscara

He intentado usar esto, pero me da consultas que pasan a través del servidor de Django

from django.db import connection 
connection.queries() 

I lo he visto en alguna parte, no recuerdo dónde?

+1

posible duplicado de [Django: mostrar/registrar llamadas ORM sql desde el shell python] (http: // stackoverflow.com/questions/2314920/django-show-log-orm-sql-calls-from-python-shell) – tyrion

Respuesta

5

Django ¿Cómo veo consulta en gestionar la cáscara

Hay dos formas de ver la consulta en el cáscara. En primer lugar, si está utilizando un conjunto de preguntas puede usar el atributo query del conjunto de preguntas. Por ej.

qs = MyModel.objects.all() 
print qs.query 

Segundo cuando la consulta no está visible de inmediato. Por ej. cuando está actualizando un queryset usando update(). En este caso se puede:

from django.db import connection 
MyModel.objects.all().update(foo = 'bar') 
print connection.queries 
# print connection.queries[-1] # if you want to see only the last query 

He intentado usar esto, pero me da consultas que pasan a través del servidor de Django

No entiendo qué quiere decir con "me da consultas que pasar por el servidor de Django ". ¿Estás tratando de ver las consultas mientras ejecutas la aplicación? En ese caso, use django-debug-toolbar o snippet al que hace referencia el @rubayeet.

+0

Ok, lo que estaba haciendo era asignar el conjunto de preguntas a una variable, por ejemplo, cur = Entry.objects.all(). Pero estoy bien ahora. Gracias – gath

1

Puede imprimir el código SQL para consultas individuales, así:

your_query = YourModel.objects.all() 
print your_query.query 

¿Eso es todo lo que necesita?

+0

¿Muestra la instrucción SQl sin procesar? – gath

+0

@gath: Sí, lo hace. – sdolan

2

La manera más fácil es usar django extensions. Se puede instalar con

$ pip install django-extensions 

Comience su concha con

./manage.py shell_plus --print-sql 

Ejecutar una consulta

In [1]: Book.objects.all() 
Out[1]: SELECT "book_book"."id", "book_book"."name", "book_book"."author_id" FROM "book_book" LIMIT 21 

Execution time: 0.087548s [Database: default] 

<QuerySet [<Book: The Stranger>, <Book: Atlas Shrugged>]> 

Si no desea anexar --print-sql cada vez que, en la configuración de Django, puede establecer

SHELL_PLUS_PRINT_SQL = True 

Una forma alternativa es habilitar el registro para consultas db.

LOGGING = { 
    'version': 1, 
    'loggers': { 
     'django.db.backends': { 
      'level': 'DEBUG', 
      'handlers': ['console'], 
     } 
    }, 
    'handlers': { 
     'console': { 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'filters': ['require_debug_true'], 
     } 
    }, 
    'filters': { 
     'require_debug_true': { 
      '()': 'django.utils.log.RequireDebugTrue', 
     } 
    }, 
} 

Agregue esto a su configuración y reinicie su caparazón para ver las consultas SQL.

Cuestiones relacionadas