django orm, как просмотреть (или войти) выполненный запрос?
есть ли способ распечатать запрос, который генерирует Django ORM?
скажем, я выполняю следующее утверждение:Model.objects.filter(name='test')
Как я могу увидеть сгенерированный SQL-запрос?
7 ответов:
каждый объект QuerySet имеет
query
атрибут, который можно записать или распечатать в stdout для отладки.qs = Model.objects.filter(name='test') print qs.query
Edit
Я также использовал пользовательские теги шаблонов (как описано в этот фрагмент) для вставки запросов в область одного запроса в виде комментариев 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
приложение, оно будет регистрировать все запросы для вас, отображать информацию о профилировании для них и многое другое.
надежным решением было бы иметь ваш журнал сервера базы данных в файл, а затем
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 в установленные приложения, это должно быть добавлено ниже в 'django.ВНО.staticfiles'. Также добавьте debug_toolbar в Middleware.
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 & add ниже кода:
if settings.DEBUG: import debug_toolbar urlpatterns = [ url(r'^__debug__/', include(debug_toolbar.urls)) ] + urlpatterns
применить миграцию и снова запустить сервер
вы увидите надстройку на своей веб-странице в 127.0.0.1 & если вы нажмете на флажок SQL Query, вы также можете увидеть время выполнения запроса.