Как получить SQL, который Django будет использовать в базе данных из объекта QuerySet? Я пытаюсь отладить какое-то странное поведение, но я не уверен, какие запросы идут в базу данных. Благодарим за помощь.
Получение SQL из QuerySet Django
Ответ 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-запрос на консоль, с подсветкой цвета и временем выполнения, для меня было неоценимо оптимизировать некоторые сложные запросы
Ответ 5
В качестве альтернативы другим ответам django-devserver выводит SQL на консоль.