我有一个 ~ 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 内置发电机的事?
这个问题的答案似乎表明内存消耗是不可预期的。