Как получить SQL, который Django будет использовать в базе данных из объекта QuerySet? Я пытаюсь отладить какое-то странное поведение, но я не уверен, какие запросы идут в базу данных. Благодарим за помощь.
Вы печатаете атрибут queryset query
.
>>> queryset = MyModel.objects.all()
>>> print queryset.query
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
query
не является допустимым SQL, потому что «Django никогда не интерполирует параметры: он отправляет запрос и параметры отдельно в адаптер базы данных, который выполняет соответствующие операции». Источник: code.djangoproject.com/ticket/17741
Легко:
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 проект использует это, чтобы аккуратно представить запросы на странице.
Принятый ответ не работал у меня при использовании Django 1.4.4. Вместо необработанного запроса была возвращена ссылка на объект Query: <django.db.models.sql.query.Query object at 0x10a4acd90>
.
После этого возвращается запрос:
>>> queryset = MyModel.objects.all()
>>> queryset.query.__str__()
queryset.query
вместо print queryset.query
, который вызывает __str__()
__str__()
чтобы получить его в виде строки, вам нужно выполнить str(queryset.query)
.
Это промежуточное программное обеспечение будет выводить каждый SQL-запрос на консоль, с подсветкой цвета и временем выполнения, для меня было неоценимо оптимизировать некоторые сложные запросы
В качестве альтернативы другим ответам django-devserver выводит SQL на консоль.