Como visualizar consulta SQL de queryset do Django ORM correspondente?
-
13-09-2019 - |
Pergunta
Existe uma maneira que eu posso imprimir a consulta do Django ORM está gerando?
Say I execute a seguinte instrução: Model.objects.filter(name='test')
Como faço para começar a ver a consulta SQL gerado?
Solução
Cada objeto QuerySet tem um atributo query
que você pode registrar ou imprimir para stdout para fins de depuração.
qs = Model.objects.filter(name='test')
print qs.query
Editar
Eu também usei tags de modelos personalizados (conforme descrito no esse trecho ) para injetar as consultas no âmbito de um único pedido de comentários HTML.
Outras dicas
Você também pode usar o log de python para registrar todas as consultas geradas pelo Django. Basta adicionar isso ao seu arquivo de configurações.
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
},
},
}
Outro método no aplicativo caso está gerando html - django debug toolbar pode ser usado.
Você pode colar este código em seu intérprete que irá exibir todas as 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())
Enquanto DEBUG
está em:
from django.db import connection
print(connection.queries)
Para uma consulta individual, você pode fazer:
print(Model.objects.filter(name='test').query)
Talvez você deve dar uma olhada aplicação django-debug-toolbar
, ele irá registrar todas as consultas para você, exibição de informações de perfil para eles e muito mais.
A solução robusta seria a de ter o seu log do servidor de banco de dados para um arquivo e, em seguida,
tail -f /path/to/the/log/file.log
Você pode usar um debug_toolbar Django para ver a consulta SQL. Guia passo a passo para o uso debug_toolbar:
Instale o Debug_toolbar
pip install django-debug-toolbar
Editar settings.py arquivo e adicionar debug_toolbar para aplicativos instalados, este deve ser adicionado abaixo para 'django.contrib.staticfiles'. Também adicionar debug_toolbar para Middleware.
Settings.py =>
INSTALLED_APPS= [ 'debug_toolbar']
MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware']
criar uma nova lista INTERNAL_IPS nomeados no arquivo settings.py
Settings.py => Criar nova lista no final do arquivo settings.py e adicione abaixo a lista:
INTERNAL_IPS= [127.0.0.1']
Isso permitirá que a depuração para executar apenas no servidor developement interna
Editar urls.py arquivo de #Project e adicionar o código abaixo:
if settings.DEBUG:
import debug_toolbar
urlpatterns = [
url(r'^__debug__/', include(debug_toolbar.urls))
] + urlpatterns
aplicar migrar & run servidor novamente
Você verá um add-on na sua página web em 127.0.0.1 e se você clicar em caixa de seleção SQL Query, você pode realmente ver o tempo de execução da consulta também.