我有一个~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内置发电机我缺少了什么?
this question的答案似乎表明内存消耗不是预期的.