2

我不是 python 专家,我很好奇 django 如何优化以下查询

Model.objects.filter(field = 'abc')[0]

不知何故,django 会智能地将 ' limit 1' 添加到 SQL 查询中,例如 ' select * from model where field = 'abc' limit 1'

4

1 回答 1

1

这是因为Model.objects.filter(...)它实际上并没有返回一个列表,它返回一个查询集对象。当您这样做时qset[0],它会调用查询__getitem__集上的方法,该方法会添加limit 1并执行它。这是该方法的来源;当结果已经被缓存或没有被缓存等等时,有各种情况的逻辑。

于 2012-11-06T02:45:44.743 回答