Django 迭代器与值列表一起使用时是否提供了改进?

Django 迭代器与值列表一起使用时是否提供了改进?,django,django-orm,Django,Django Orm,最近我看到了一起使用iterator()和values\u list()的代码。两者一起使用有意义吗?它会提高速度或内存使用率吗 示例代码: Customer.objects.values_list("pk", flat=True).iterator() value\u list()返回返回字典的QuerySet QuerySet是惰性的–创建QuerySet的行为不涉及任何数据库活动。您可以整天将过滤器堆叠在一起,Django在计算QuerySet之前不会实际运行查询 当计算queryset

最近我看到了一起使用
iterator()
values\u list()
的代码。两者一起使用有意义吗?它会提高速度或内存使用率吗

示例代码:

Customer.objects.values_list("pk", flat=True).iterator()
value\u list()
返回返回字典的
QuerySet

QuerySet
是惰性的–创建
QuerySet
的行为不涉及任何数据库活动。您可以整天将过滤器堆叠在一起,Django在计算QuerySet之前不会实际运行查询

当计算
queryset
时,您可以查看检查

事实上,通过创建一个
queryset
django直到它被评估(通过类似
iterator
的方法)时才会命中数据库

由于
Iterator()
在需要一次访问对象的情况下,无缓存读取结果将获得更好的性能,并且与
查询集的类型无关

Iterator()
将减少内存使用,因为结果将以块的形式加载,但这可能不会影响总体速度,因为加载的数据量相同。这实际上取决于在迭代结果时要做什么