2

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

例如,

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

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

但是对于通过“get”检索对象,比如说,

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

如何获得等效的原始 sql?注意:该项目可能是无。

4

3 回答 3

5

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在您的浏览器中安装并享受它。

于 2012-08-29T14:47:00.883 回答
3

这是相同的 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它。

于 2012-08-29T14:49:31.647 回答
2

如果只是出于调试目的,您可以使用“django debug bar”,它可以通过以下方式安装

pip install django-debug-toolbar
于 2012-08-29T14:39:02.113 回答