对于 Django 中的 Queryset,我们可以调用它的方法 .query 来获取原始 sql。
例如,
queryset = AModel.objects.all()
print queryset.query
输出可能是:SELECT "id", ... FROM "amodel"
但是对于通过“get”检索对象,比如说,
item = AModel.objects.get(id = 100)
如何获得等效的原始 sql?注意:该项目可能是无。
对于 Django 中的 Queryset,我们可以调用它的方法 .query 来获取原始 sql。
例如,
queryset = AModel.objects.all()
print queryset.query
输出可能是:SELECT "id", ... FROM "amodel"
但是对于通过“get”检索对象,比如说,
item = AModel.objects.get(id = 100)
如何获得等效的原始 sql?注意:该项目可能是无。
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,如果 afilter
足够具体到只返回一个结果,它与get
将产生的 SQL 相同,唯一的区别在于此时的 Python 端,例如
AModel.objects.get(id=100)
是相同的:
AModel.objects.filter(id=100).get()
因此,您可以简单地查询AModel.objects.filter(id=100)
然后使用queryset.query
它。
如果只是出于调试目的,您可以使用“django debug bar”,它可以通过以下方式安装
pip install django-debug-toolbar