ate C距离很近,但不太远。
从文档:
你可以通过以下方式评估QuerySet:
- 迭代。QuerySet是可迭代的,并且在你第一次对其进行迭代时会执行其数据库查询。例如,这将打印数据库中所有条目的标题:
for e in Entry.objects.all(): print e.headline
因此,当你第一次进入该循环并获得查询集的迭代形式时,一次就可以检索一千万行。你遇到的等待是Django加载数据库行并为每个数据库行创建对象,然后返回实际上可以迭代的内容。然后,你将所有内容存储在内存中,结果溢出了。
根据我对文档的阅读,
iterator()仅能绕过QuerySet的内部缓存机制。我认为一件一件一件地做是有意义的,但是相反,这需要对数据库进行一千万次单独点击。也许不是所有想要的。



