Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我应该在django查询集上迭代还是在变量上迭代?_Python_Django_Django Queryset - Fatal编程技术网

Python 我应该在django查询集上迭代还是在变量上迭代?

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

我有一个从django queryset返回的大数据集,我想对它进行迭代。我应该直接迭代查询集还是将结果存储在变量中并迭代

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()