Может ли ORM Django выводить используемый SQL-запрос?

Я знаю, что вы можете вывести SQL, чтобы увидеть созданные таблицы. Может ли Django выводить sql, используемый для любого запроса, например:

Protocols.objects.filter(active=False)

? Я не смог найти это в документации, поэтому, надеюсь, кто-нибудь может указать мне на них, если Django действительно может это сделать.


person Randy    schedule 21.01.2011    source источник


Ответы (3)


См. FAQ по Django: Как увидеть необработанные SQL-запросы, выполняемые Django?:

>>> from django.db import connection    
>>> connection.queries = []
>>> Protocols.objects.filter(active=False)
>>> print connection.queries
person Tomasz Zieliński    schedule 21.01.2011
comment
Отлично, не знаю, как я этого раньше не заметил. - person Randy; 22.01.2011
comment
Это очень хорошо, но проблема в том, что некоторые запросы можно стереть. Вы должны знать, куда девать инструкции. А если я хочу просмотреть все запросы без ведома? - person sergzach; 10.09.2011
comment
Я имею в виду, что иногда вы можете увидеть не все инструкции SQL, если вы размещаете вывод только в одном месте. - person sergzach; 11.09.2011
comment
@sergzach: Итак ... поместите результат там, где он вам нужен? - person Tomasz Zieliński; 11.09.2011
comment
Обновление: если вам не нужен полный журнал SQL, вы можете либо проверить журналы своей базы данных, журнал django.db Python (в режиме DEBUG), либо использовать сервер разработки, который записывает SQL в консоль (я не помню, какая надстройка это в) - person Tomasz Zieliński; 11.09.2011

Да, оно может. Убедитесь, что в вашем файле настроек стоит DEBUG=True

вы можете увидеть, какие sql-запросы были выполнены ...

>>> from django.db import connection
>>> connection.queries

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

Чтобы увидеть, что выполняется для доставки определенного QuerySet, вы можете сделать следующее

str(MyModel.objects.filter(myvar__gte=15).query)

Это задокументировано здесь http://docs.djangoproject.com/en/dev/faq/models/

person Dan    schedule 21.01.2011

Я считаю, что панель инструментов отладки Django неоценима. Также существует .as_sql () для отображения вещей в коде (см. это сообщение SO для заметки, которая является хорошей строкой для него)

person Steve Jalim    schedule 21.01.2011