Python 强制计算惰性查询

Python 强制计算惰性查询,python,django,Python,Django,有没有办法计算以下表达式 instances = Catalog.objects.filter(q) 我试图分析它,但由于它是懒惰的,它在返回它之前实际上不会进行评估。我在想列表(实例),还有别的吗?下面是所有评估惰性查询集的方法。使用列表是其中之一: 使用list()将计算查询,检索其所有结果,并将所有数据添加到查询集的缓存中。如果您没有实际计划使用数据,那么这可能会带来大量开销 您可以改为使用Catalog.objects.filter(q).exists()(请参阅),它不需要获取整个结

有没有办法计算以下表达式

instances = Catalog.objects.filter(q)

我试图分析它,但由于它是懒惰的,它在返回它之前实际上不会进行评估。我在想
列表(实例)
,还有别的吗?

下面是所有评估惰性查询集的方法。使用
列表
是其中之一:

使用
list()
将计算查询,检索其所有结果,并将所有数据添加到查询集的缓存中。如果您没有实际计划使用数据,那么这可能会带来大量开销

您可以改为使用
Catalog.objects.filter(q).exists()
(请参阅),它不需要获取整个结果集。请注意,它会执行不同的查询,根据您的DBMS的不同,该查询类似于以下内容:

SELECT (1) AS "a" FROM "..._catalog" LIMIT 1;
如果要评估一个更接近您最初执行的查询,可以执行以下操作:

try:
    Catalog.objects.filter(q)[0]
except IndexError:
    pass
这仍然会将
限制
顶部
添加到您的查询中,但至少您的查询仍将包括所有列和顺序,并且您的原始查询将包含这些列和顺序

您可能会尝试执行类似于
bool(Catalog.objects.filter(q))
的操作,或者在布尔上下文中使用QuerySet,但请注意,这将表现为
list()
,获取整个结果集