我有一个〜10M记录的MySQL表,可以使用SqlAlchemy进行交互。我发现对这个表的大子集的查询将消耗过多的内存,即使我以为我使用的是内置生成器,它可以智能地获取数据集的一口大小的块:
for thing in session.query(Things):
analyze(thing)
为了避免这种情况,我发现我必须构建自己的迭代器,该迭代器会分块地进行处理:
lastThingID = None
while True:
things = query.filter(Thing.id < lastThingID).limit(querySize).all()
if not rows or len(rows) == 0:
break
for thing in things:
lastThingID = row.id
analyze(thing)
这是正常现象还是关于SA内置发电机我缺少什么?
这个问题的答案似乎表明内存消耗是不希望的。