Как просмотреть соответствующий SQL-запрос из набора запросов Django ORM?

Вопрос:Есть ли способ распечатать запрос, который генерирует ORM Django? Скажем, я выполняю следующий оператор: Model.objects.filter(name='test') Как мне получить сгенерированный SQL-запрос? Лучший ответ: Каждый объект QuerySet имеет атрибут query, который вы можете записывать или печатать в stdout для целей отладки. qs = Model.objects.filter(name='test') print qs.query Edit Я также использовал пользовательские теги шаблонов (как описано в этот

Вопрос:

Есть ли способ распечатать запрос, который генерирует ORM Django?

Скажем, я выполняю следующий оператор: Model.objects.filter(name=’test’)

Как мне получить сгенерированный SQL-запрос?

Лучший ответ:

Каждый объект QuerySet имеет атрибут query, который вы можете записывать или печатать в stdout для целей отладки.

qs = Model.objects.filter(name=’test’) print qs.query

Edit

Я также использовал пользовательские теги шаблонов (как описано в этот фрагмент), чтобы вводить запросы в область одного запроса как HTML комментарии.

Ответ №1

Вы также можете использовать ведение журнала python для регистрации всех запросов, сгенерированных 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.

Ответ №2

Вы можете вставить этот код в свой интерпретатор, который отобразит все 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()) Ответ №3

Пока DEBUG:

from django.db import connection print(connection.queries)

Для отдельного запроса вы можете сделать:

print(Model.objects.filter(name=’test’).query) Ответ №4

Возможно, вам стоит взглянуть на приложение django-debug-toolbar, оно будет регистрировать все запросы для вас, отображать данные профилирования для них и многое другое.

Ответ №5

Надежным решением было бы иметь доступ к вашему серверу базы данных в файл, а затем

tail -f /path/to/the/log/file.log Ответ №6

Вы можете использовать Django debug_toolbar для просмотра SQL-запроса.
Пошаговое руководство по использованию debug_toolbar:

Содержание

  1. Установите Debug_toolbar
  2. Отредактируйте файл settings.py и добавьте debug_toolbar в Установленные приложения, это должно быть добавлено ниже к ‘django.contrib.staticfiles’. Также добавьте debug_toolbar в Middleware.
  3. создать новый список с именем INTERNAL_IPS в файле settings.py
  4. Измените файл urls.py #Project и добавьте ниже код:
  5. применить миграцию и снова запустить сервер

Установите Debug_toolbar

pip install django-debug-toolbar

Отредактируйте файл settings.py и добавьте debug_toolbar в Установленные приложения, это должно быть добавлено ниже к ‘django.contrib.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 и добавьте ниже код:

if settings.DEBUG: import debug_toolbar urlpatterns = [ url(r’^__debug__/’, include(debug_toolbar.urls)) ] + urlpatterns

применить миграцию и снова запустить сервер

Вы увидите надстройку на своей веб-странице в 127.0.0.1, и если вы нажмете на SQL Query, вы также можете увидеть время выполнения запроса.

Оцените статью
Добавить комментарий