template queryset example django django-models django-orm

queryset - django orm, ¿cómo ver(o registrar) la consulta ejecutada?



django template tags (7)

Cada objeto QuerySet tiene un atributo de query que puede registrar o imprimir en stdout para fines de depuración.

qs = Model.objects.filter(name=''test'') print qs.query

Editar

También utilicé etiquetas de plantilla personalizadas (como se describe en este fragmento de código) para inyectar las consultas en el ámbito de una sola solicitud como comentarios HTML.

¿Hay alguna forma de que pueda imprimir la consulta que genera el ORM de Django?

Digamos que ejecuto la siguiente declaración: Model.objects.filter(name=''test'')

¿Cómo puedo ver la consulta SQL generada?


Puede pegar este código en su intérprete, que mostrará todas las consultas SQL:

# To get all sql queries sent by Django from py shell import logging l = logging.getLogger(''django.db.backends'') l.setLevel(logging.DEBUG) l.addHandler(logging.StreamHandler())


Puede usar una barra de depuración Django para ver la consulta SQL. Guía paso a paso para el uso de debug_toolbar:

Instala la Debug_toolbar

pip install django-debug-toolbar

Edite el archivo settings.py y agregue debug_toolbar a las aplicaciones instaladas, esto se debe agregar debajo de ''django.contrib.staticfiles''. También agregue debug_toolbar a Middleware.

Settings.py =>

INSTALLED_APPS= [ ''debug_toolbar''] MIDDLEWARE = [''debug_toolbar.middleware.DebugToolbarMiddleware'']

crea una nueva lista llamada INTERNAL_IPS en el archivo settings.py

Settings.py => crea una nueva lista al final del archivo settings.py y agrega la siguiente lista:

INTERNAL_IPS= [127.0.0.1'']

Esto permitirá que la depuración se ejecute solo en el servidor de desarrollo interno

Edite el archivo urls.py de #Project y agregue el siguiente código:

if settings.DEBUG: import debug_toolbar urlpatterns = [ url(r''^__debug__/'', include(debug_toolbar.urls)) ] + urlpatterns

aplicar migrar y ejecutar el servidor de nuevo

Verá un complemento en su página web en 127.0.0.1 y si hace clic en la casilla de verificación Consulta SQL, también puede ver el tiempo de ejecución de la consulta.


Siempre que DEBUG esté DEBUG :

from django.db import connection print connection.queries

Para una consulta individual, puede hacer:

print Model.objects.filter(name=''test'').query


Tal vez debería echar un vistazo a la aplicación django-debug-toolbar , registrará todas las consultas para usted, mostrará información de perfiles para ellas y mucho más.


También puede usar el registro de Python para registrar todas las consultas generadas por Django. Solo agrega esto a tu archivo de configuración.

LOGGING = { ''disable_existing_loggers'': False, ''version'': 1, ''handlers'': { ''console'': { # logging handler that outputs log messages to terminal ''class'': ''logging.StreamHandler'', ''level'': ''DEBUG'', # message level to be written to console }, }, ''loggers'': { '''': { # this sets root level logger to log debug and higher level # logs to console. All other loggers inherit settings from # root level logger. ''handlers'': [''console''], ''level'': ''DEBUG'', ''propagate'': False, # this tells logger to send logging message # to its parent (will send if set to True) }, ''django.db'': { # django also has database level logging }, }, }

Otro método en caso de que la aplicación genere resultados en html: se puede usar la barra de herramientas de depuración django .


Una solución robusta sería tener el registro de su servidor de base de datos en un archivo y luego

tail -f /path/to/the/log/file.log