在Django中,我不明白为什么queryset的iterator()
方法可以减少内存使用。
Django文档如下所示。
QuerySet通常在内部缓存它的结果,这样重复的计算就不会导致额外的查询。()将直接读取结果,而不在QuerySet级别进行任何缓存(在内部,默认迭代器调用iterator()并缓存返回值)对于一个返回大量只需要访问一次的对象的QuerySet,这可以导致更好的性能和存储器的显著减少。
但是,据我所知,无论是否使用iterator()
方法,在求值之后,查询的行都会立即从数据库中取出并加载到内存中。无论查询集是否进行缓存,使用的内存与行数成比例,这不都是一样的吗?那么,假设只对查询集求值一次,使用iterator()
方法的好处是什么?
这是因为从数据库获取的原始数据和缓存的数据(示例化后)存储在不同的内存空间中吗?如果是这样,我想我可以理解不使用iterator()
方法执行缓存可以节省内存。
1条答案
按热度按时间vjrehmav1#
使用
iterator
时,Django使用DB游标逐行获取数据,如果使用all
并使用python迭代,那么所有记录都将缓存在内存中,而你需要一个接一个的记录。因此,通过使用
iterator
,您使用的是DB游标,并逐个获取数据,而其他记录不会一次全部获取。