Как просмотреть SQL-запросы Django в режиме отладки
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для отслеживания SQL-запросов, выполняемых Django, воспользуйтесь connection.queries
. Проверьте, что в настройках DEBUG
значение установлено на True
.
from django.db import connection
# Здесь выполняется ваш запрос...
print(connection.queries) # Выводятся SQL-запросы в их первозданном виде!
Примечание: Используйте это только при отладке кода. В случае постоянной работы это может привести к снижению производительности.
Погружение
Вглядывание в будущее SQL-запроса с помощью атрибута .query
QuerySets ORM Django дает возможность просмотра не выполненного SQL-запроса через атрибута .query
:
my_queryset = MyModel.objects.all()
print(my_queryset.query) # Просмотр ожидаемого SQL-запроса
Отладка при помощи Django Debug Toolbar
Django Debug Toolbar предоставляет весьма удобные инструменты для просмотра SQL-запросов, указывающие также время их выполнения. Это помогает улучшить работу с базой данных.
pip install django-debug-toolbar
После установки добавьте его в список INSTALLED_APPS
и в middleware.
Очищение истории запросов с помощью reset_queries
Чтобы предотвратить накапливание данных о прошлых запросах, можно использовать reset_queries
, чтобы очистить их историю:
from django.db import reset_queries
reset_queries()
# Здесь выполняются новые запросы
print(connection.queries) # Выводятся данные только о новых запросах
Просмотр логов базы данных в реальном времени
Для мониторинга в реальном времени:
- В Linux используйте
tail -f
, чтобы отслеживать логи базы данных в реальном времени. - Наблюдайте за взаимодействием вашего приложения с базой данных.
Акцент на безопасность: остерегайтесь использования print()
на production
Будьте аккуратны при использовании вывода SQL-запросов на production, это может стать причиной уязвимостей.
django-extensions для отслеживания ORM-запросов
С использованием инструмента shell_plus
и опции print-sql
из django-extensions можно следить за преобразованием ORM-запросов в SQL:
python manage.py shell_plus --print-sql
Визуализация
В работе Django ORM происходит что-то вроде исполнения музыки бессмысленным оркестром за скрытыми от нас декорациями:
Django ORM 🎨: Организует процесс, не видя «ноты», которые используют музыканты.
Чтобы упорядочить происходящее, воспользуйтесь:
from django.db import connection
print(connection.queries)
Открываем занавес…
Занавес (🎭) | Симфония (🎼)
-------------|-----------------
🖼️ ORM-код | SELECT * FROM ...
🖼️ QuerySet | INSERT INTO ...
Таким образом, музыка SQL, которую дирижирует Django ORM, становится наглядной.
Продвинутые усовершенствования
Изучение SQL для оптимизации производительности
Анализ SQL-запросов помогает более точно подобрать параметры производительности приложения.
Аккуратность при выводе информации в production
Контролируйте вывод запросов в production, чтобы минимизировать наличие проблем с логами.
Использование возможностей баз данных
В каждой БД есть уникальные инструменты, например, pg_stat_statements
в PostgreSQL, помогающие оптимизировать запросы.
Понимание деталей для достижения эффективности
Учет времени запросов и анализ статистики БД помогут оптимизировать её работу.
Полезные материалы
- Django Debug Toolbar — визуальное руководство по SQL
- Изучение исходных SQL-запросов в Django
- Настройка логирования SQL в Django
- Обсуждение на Stack Overflow: исходные SQL-запросы в Django
- Эффективное использование ORM и QuerySets в Django
- Выполнение "сырых" SQL-запросов при помощи Django
- Оптимизация работы с базой данных через Django