我想迭代QuerySet中的所有对象。但是,QuerySet匹配数十万甚至数百万个对象。因此,当我尝试启动迭代时,我的CPU使用率达到100%,我的所有内存都会填满,然后事情就会崩溃。这在第一个项目返回之前发生:
bts = Backtrace.objects.all()
for bt in bts:
print bt
我可以要求一个单独的对象,它会立即返回:
bts = Backtrace.objects.all()
print(bts[5])
但是如上所述,所有对象的计数都会崩溃,所以我不能使用这种方法进行迭代,因为我不知道会有多少个对象。
什么是迭代方式而不会导致整个结果被预先缓存?
答案 0 :(得分:3)
首先确保您了解查询集何时evaluated(点击数据库)。
当然,一种方法是filter查询集。
如果这是不可能的,根据您的需要,您可以使用一些变通方法:
这是一个很好的article,试图在更理论的层面上解决这个问题。