Может ли Django ORM выводить используемый SQL-запрос?
Я знаю, что вы можете вывести SQL, чтобы увидеть таблицы, которые создаются. Возможно ли для Django вывести sql, используемый для любого запроса, такого как:
Protocols.objects.filter(active=False)
? Я не мог найти это в документах, так что, надеюсь, кто-то может указать мне их, если на самом деле Django может сделать это.
3 ответа
См. Django FAQ: Как я могу увидеть необработанные SQL-запросы, которые выполняет Django?:
>>> from django.db import connection
>>> connection.queries = []
>>> Protocols.objects.filter(active=False)
>>> print connection.queries
Да, оно может. Вы должны убедиться, что DEBUG=True
в вашем файле настроек
Вы можете увидеть, какие SQL-запросы были выполнены...
>>> from django.db import connection
>>> connection.queries
Вам, очевидно, нужно выполнить несколько запросов, чтобы увидеть их здесь.
Чтобы увидеть, что выполняется для доставки определенного QuerySet, вы можете сделать следующее
ул (MyModel.objects.filter(myvar__gte=15).query)
Это задокументировано здесь http://docs.djangoproject.com/en/dev/faq/models/
Я считаю, что панель отладки Django неоценима. Есть также.as_sql() для отображения кода в коде (см. Этот пост SO для заметки, которая является хорошей строкой для него)