Печать Django QuerySet SQL с помощью "" - PullRequest
8 голосов
/ 13 ноября 2011

Вы можете напечатать SQL набора запросов следующим образом:

print str(queryset.query)

однако по какой-то причине это удаляет кавычки, поэтому вы получаете:

SELECT `tableA`.`fieldA` FROM `fieldA` WHERE `tableA`.`fieldB` = Foo

вместо:

SELECT `tableA`.`fieldA` FROM `fieldA` WHERE `tableA`.`fieldB` = "Foo"

заметить пропавших без вести ""

Как это можно исправить?

Ответы [ 3 ]

7 голосов
/ 03 апреля 2014

Если базовая база данных PostgreSQL , вы можете сделать:

from django.db import connection
sql, params = queryset.query.sql_with_params()
cursor = connection.cursor()
cursor.mogrify(sql, params)

sql_with_params возвращает простой запрос без подставленных значений и параметры, которые будут вставлены в запрос.

Все еще не рекомендуется использовать .mogrify() для других целей, кроме отладки, поскольку метод может исчезнуть в будущем.

Если вы хотите выполнить запрос, вы можете / должны просто использовать .raw().

YourModel.objects.raw(sql, params)
3 голосов
/ 13 ноября 2011

не совсем то, что вы хотите, но если у вас есть DEBUG = True, вы можете использовать

from django.db import connection
connection.queries

Обновление:

глядя на Queryset __str__ метод:

__str__(self)
|      Returns the query as a string of SQL with the parameter values
|      substituted in.
|      
|      Parameter values won't necessarily be quoted correctly, since that is
|      done by the database interface at execution time.
1 голос
/ 15 ноября 2011

Если это для целей отладки, вы должны заглянуть в django-debug-toolbar, который покажет вам все запросы, запущенные для любого просмотра, который вы просматриваете

...