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

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

Ответ 1

Вы печатаете атрибут query queryset.

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

Ответ 2

Легко:

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 использует это для аккуратного представления запросов на странице.

Ответ 3

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

После этого возвращается запрос:

>>> queryset = MyModel.objects.all()
>>> queryset.query.__str__()

Ответ 4

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

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

Ответ 5

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