我需要在Django中迭代大型集合(3 * 10 ^ 6个元素)来进行某种使用单个SQL语句无法完成的分析。
iter(Coll.objects.all()).next()
- 这需要永远iter(Coll.objects.all()[:10000]).next()
- 这需要不到一秒的时间答案 0 :(得分:1)
使用QuerySet.iterator()
遍历结果,而不是先加载所有结果。
答案 1 :(得分:1)
它认为问题是由不支持读取数据块的数据库后端(sqlite)引起的。 我已经使用了sqlite,因为在我进行所有计算之后数据库将被删除,但似乎sqlite即使对此也不好。
以下是我在sqlite后端的django源代码中找到的内容:
class DatabaseFeatures(BaseDatabaseFeatures):
# SQLite cannot handle us only partially reading from a cursor's result set
# and then writing the same rows to the database in another cursor. This
# setting ensures we always read result sets fully into memory all in one
# go.
can_use_chunked_reads = False