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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top