从Django QuerySet获取SQL
我想知道如何从一个QuerySet对象中获取Django将要在数据库上使用的SQL语句。我正在尝试调试一些奇怪的行为,但我不确定哪些查询会发送到数据库。
5 个回答
69
这个被接受的答案在我使用Django 1.4.4的时候没有效果。它返回的不是我想要的原始查询,而是一个指向查询对象的引用,显示的内容是:<django.db.models.sql.query.Query object at 0x10a4acd90>
。
下面的代码返回了我需要的查询:
>>> queryset = MyModel.objects.all()
>>> queryset.query.__str__()
73
简单来说:
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 这个项目就是利用这个功能,把查询结果整齐地展示在页面上。
652
你打印了查询集的 query
属性。
>>> queryset = MyModel.objects.all()
>>> print(queryset.query)
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"