Может ли 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 для заметки, которая является хорошей строкой для него)

Другие вопросы по тегам