django orm, как просмотреть (или зарегистрировать) выполненный запрос?
есть ли способ распечатать запрос, который генерирует Django ORM?
скажем, я выполняю следующий оператор:Model.objects.filter(name='test')
Как я могу увидеть сгенерированный SQL-запрос?
7 ответов
каждый объект QuerySet имеет query
атрибут, который можно регистрировать или печатать в stdout для целей отладки.
qs = Model.objects.filter(name='test')
print qs.query
редактировать
Я также использовал пользовательские теги шаблонов (как описано в этот фрагмент) для вставки запросов в область одного запроса в виде комментариев HTML.
вы также можете использовать Python logging для регистрации всех запросов, генерируемых Django. Просто добавьте это в файл настроек.
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
},
},
}
другой метод в случае, если приложение генерирует вывод html -панель инструментов отладки django можно использовать.
вы можете вставить этот код на свой интерпретатор, который отобразит все 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())
пока DEBUG
на:
from django.db import connection
print(connection.queries)
для отдельного запроса, вы можете сделать:
print(Model.objects.filter(name='test').query)
Возможно, вам стоит взглянуть на django-debug-toolbar
application, он будет регистрировать все запросы для вас, отображать информацию профилирования для них и многое другое.
надежным решением было бы иметь журнал сервера базы данных в файл, а затем
tail -f /path/to/the/log/file.log
вы можете использовать Django debug_toolbar для просмотра SQL-запроса. Пошаговое руководство по использованию debug_toolbar:
установить Debug_toolbar
pip install django-debug-toolbar
изменить settings.py file & add debug_toolbar to Installed apps, это должно быть добавлено ниже в ' django.ВНО.staticfiles'. Также добавьте debug_toolbar в промежуточное ПО.
Settings.py=>
INSTALLED_APPS= [ 'debug_toolbar']
MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware']
создайте новый список с именем INTERNAL_IPS в settings.py файл
Settings.py=> создать новый список в конце settings.py Файл & Добавить ниже списка:
INTERNAL_IPS= [127.0.0.1']
это позволит отладке работать только на внутреннем сервере разработки
изменить urls.py файл #Project & добавить ниже код:
if settings.DEBUG:
import debug_toolbar
urlpatterns = [
url(r'^__debug__/', include(debug_toolbar.urls))
] + urlpatterns
применить миграцию и запустить сервер снова
вы увидите на веб-странице на 127.0.0.1 и если вы нажмете на флажок SQL запросов можно увидеть время выполнения запроса, а также.