Получение 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-запрос на вашу консоль с цветовой подсветкой и временем выполнения, для меня было неоценимо оптимизировать некоторые хитрые запросы

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

Другие вопросы по тегам