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