it-swarm.com.ru

Получение SQL из Django QuerySet

Как получить SQL, который Django будет использовать в базе данных, из объекта QuerySet? Я пытаюсь отладить какое-то странное поведение, но я не уверен, какие запросы поступают в базу данных. Спасибо за вашу помощь.

264
exupero

Вы печатаете атрибут query запроса.

>>> queryset = MyModel.objects.all()
>>> print(queryset.query)
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
394
jpwatts

Легко:

print my_queryset.query

Например:

from Django.contrib.auth.models import User
print User.objects.filter(last_name__icontains = 'ax').query

Также следует отметить, что если у вас DEBUG = True, то все ваши запросы регистрируются, и вы можете получить их, обратившись к connection.queries:

from Django.db import connections
connections['default'].queries

Проект Django debug toolbar использует это для аккуратного представления запросов на странице.

50
Mike Axiak

Принятый ответ у меня не сработало при использовании Django 1.4.4. Вместо необработанного запроса была возвращена ссылка на объект Query: <Django.db.models.sql.query.Query object at 0x10a4acd90>.

Следующее вернуло запрос:

>>> queryset = MyModel.objects.all()
>>> queryset.query.__str__()
35
Hakan B.

В качестве альтернативы другим ответам Django-devserver выводит SQL на консоль.

9
Tomasz Zieliński

Это промежуточное ПО будет выводить каждый SQL-запрос на вашу консоль с цветовой подсветкой и временем выполнения, для меня было неоценимо оптимизировать некоторые хитрые запросы

http://djangosnippets.org/snippets/290/

9
Guillaume Esquevin