Python SQLAlchemy:提交小会话还是提交大会话更好(更快?)?

Python SQLAlchemy:提交小会话还是提交大会话更好(更快?)?,python,sqlalchemy,Python,Sqlalchemy,对于使用sqlalchemy ORM在postgreSQL中向表写入/更新大量行的任务,在每一行提交还是在提交之前先将所有行添加到会话中会更快/更高效 例如。 (一) 或: (二) 我做了一个粗略的测试,对n=20行的python脚本的运行时间进行计时,结果(1)非常小,尽管我认为这可能只是噪音 好吧,我做了更多的研究,在谷歌群组的SQLAlchemy邮件列表中找到了一个可能的答案。西蒙·金先生的回答如下: 我认为将行分块处理的想法是限制 Python进程的内存使用情况。直到调用session.

对于使用sqlalchemy ORM在postgreSQL中向表写入/更新大量行的任务,在每一行提交还是在提交之前先将所有行添加到会话中会更快/更高效

例如。 (一)

或: (二)


我做了一个粗略的测试,对n=20行的python脚本的运行时间进行计时,结果(1)非常小,尽管我认为这可能只是噪音

好吧,我做了更多的研究,在谷歌群组的SQLAlchemy邮件列表中找到了一个可能的答案。西蒙·金先生的回答如下:

我认为将行分块处理的想法是限制 Python进程的内存使用情况。直到调用session.flush(), 所有修改都保存在内存中。对于少量行 这不是一个问题,但对于庞大的数字来说,这可能是一个问题

实际上,这对这个例子可能没有什么影响, 因为默认会话配置是在您 调用session.query()

至于这是否优于Table.update(),这实际上取决于 在您的用例上。update()通常会更快,因为 这项工作将由数据库本身完成。如果你正在改变 试图用SQL来表示(即,他们没有 复杂的依赖关系或需要外部信息),并且 如果需要,很乐意在以后重新同步会话,然后 Table.update()可以

希望有帮助

西蒙

for foo in bar:
    session.add(foo)
    session.commit()
for foo in bar:
    session.add(foo)

session.commit()