Как проверить необработанные SQL-запросы, сгенерированные Django при отладке? - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь профилировать большую часть моего проекта, тщательно анализируя запросы, генерируемые каждой строкой кода.Тщательный анализ требует запуска сервера в режиме отладки, поэтому я могу перебирать эти строки одну за другой и уделять время изучению запросов.

До сих пор я пробовал три неудачных способа сделать это:

Проверка django.db.connection.queries

Вы можете увидеть, какие запросы были сгенерированы и выполнены к базе данных, просмотрев словарь django.db.connection.queries.Проблема с этим:

  • Это нужно активно осматривать.Вы не можете просто иметь его в качестве слушателя и регистрировать эти запросы за кулисами.Вам нужно распечатывать connection.queries после каждой отдельной строки, что создает неудобства.
  • Очевидно, он хранит только запросы, сгенерированные в том же файле, где вы используете connection.queries.Если вы проверите его сразу после вызова some_method() и этот метод будет импортирован из какого-то другого места, вы не увидите сгенерированные запросы some_method.

Конфигурация журнала

Я настроил следующую конфигурацию ведения журнала в своем файле настроек, в котором регистрируются все запросы, выполняемые к базе данных:

LOGGING = {
    'version': 1,
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
        }
    },
    'loggers': {
        'django.db.backends': {
            'level': 'DEBUG',
            'handlers': ['console']
        }
    }
}

Проблема с этим - PyCharm.При отладке PyCharm оценивает все задействованные переменные, чтобы вы могли увидеть и проверить их значение.В большинстве случаев это удобно, но полностью искажает мой анализ, поскольку для оценки этих переменных запросы выполняются к базе данных и, конечно, они регистрируются.

Панель инструментов отладки

Основная и единственная проблема, связанная с этим, заключается в том, что поведение необходимо перенести в представление.Журнал запросов не отображается до тех пор, пока представление не будет выполнено, поэтому отладка невозможна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...