Peewee在iterating over lots of rows上的文档目前描述了两种可行的优化方法。
第一个select.iterator()
选项似乎是内存优化。
第二个选项建议使用select
,dicts()
,namedtuples()
或objects()
调用tuples()
是一种速度优化,因为它可以防止Peewee重建模型图。
我的问题:
dicts()
似乎将为大型结果集返回大量字典,因此内存效率不高。那孤独的小代码是我文档底部的答案吗?
for stat in stats.objects().iterator():
serializer.serialize_object(stat)
答案 0 :(得分:1)
它们不是互斥的,可以合并。文档中的示例显示了将“ objects()”(使用平面模型实例,如果您要重构多个模型,则速度很快)和“ iterator()”(有助于减少内存使用)结合在一起。
您可以轻松地编写:
for stat in stats.tuples().iterator():
# whatever
如果您只想使用普通的数据库游标,则可以编写:
stats = Stat.select().etc()
cursor = database.execute(stats)
for row_tuple in cursor:
# do whatever