Django ORM“获得”到SQL的翻译

对于Django中的Queryset,我们可以调用它的方法.query来获得原始的sql。

例如,

queryset = AModel.objects.all()
print queryset.query

输出可能是:SELECT“id”,... FROM“amodel”

但是,通过“获取”来检索对象,比如说,

item = AModel.objects.get(id = 100)

如何获得相当于原始的sql? 注意:该项目可能是None。


item = AModel.objects.get(id = 100)等于

items = AModel.objects.filter(id = 100)
if len(items) == 1:
    return items[0]
else:
    raise exception

因此执行的查询等于AModel.objects.filter(id = 100)

另外,您可以检查connection.queries的最新项目

from django.db import connection # use connections for non-default dbs
print connection.queries[-1]

而且,正如FoxMaSk所说,安装django-debug-toolbar并在浏览器中享受它。


它是一样的SQL,只是在WHERE id=100子句结尾。

然而,FWIW,如果一个filter足够具体,只返回一个结果,它就和get产生的SQL一样,唯一的区别就是在Python那边,例如

AModel.objects.get(id=100)

是相同的:

AModel.objects.filter(id=100).get()

因此,您可以简单地查询AModel.objects.filter(id=100) ,然后使用queryset.query


如果仅仅是为了调试目的,你可以使用可以通过安装的“django调试栏”

pip install django-debug-toolbar
链接地址: http://www.djcxy.com/p/38703.html

上一篇: Django ORM "get" translation to SQL

下一篇: Select between two dates with Django