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