Python 我应该在django查询集上迭代还是在变量上迭代?
我有一个从django queryset返回的大数据集,我想对它进行迭代。我应该直接迭代查询集还是将结果存储在变量中并迭代Python 我应该在django查询集上迭代还是在变量上迭代?,python,django,django-queryset,Python,Django,Django Queryset,我有一个从django queryset返回的大数据集,我想对它进行迭代。我应该直接迭代查询集还是将结果存储在变量中并迭代 for item in Model.objects.all(): do_something() 或 据我所知,变量存储在heap中,并且更安全,在这里,就像在queryset上迭代一样,结果将存储在主存中 那么,哪一个在空间和速度上是有效的呢?如果您的数据集很大,您可以使用迭代器来减少内存负载并提高性能,例如 results = Model.objects.all
for item in Model.objects.all():
do_something()
或
据我所知,变量存储在heap中,并且更安全,在这里,就像在queryset上迭代一样,结果将存储在主存中
那么,哪一个在空间和速度上是有效的呢?如果您的数据集很大,您可以使用
迭代器来减少内存负载并提高性能,例如
results = Model.objects.all()
for item in results.iterator():
do_something()
只有在确实必要时才应该这样做,因为它会禁用queryset缓存。在此之后重新使用queryset将导致性能下降。没有区别。Python不区分堆和“主内存”(或堆栈)上的数据;至少在CPython中,所有数据都存储在堆上,并且堆栈包含对该数据的引用。看
这里唯一需要考虑的是是否需要在同一范围内再次引用queryset。如果是,则将其存储在变量中;如果没有,那么就没有必要了。两者都是相同的,但是如果使用一个变量,它只需要再输入一行代码,当您执行所有操作时,它会将其保存在内存中,第二次它不会查询数据库。所以你可以理解,
results = Model.objects.all()
for item in results.iterator():
do_something()