SQLAlchemy:提交小型会话或大型会话是否更好(更快?)?

时间:2018-10-08 02:18:42

标签: python sqlalchemy

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

例如 (1)

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

或: (2)

for foo in bar:
    session.add(foo)

session.commit()

我通过对n = 20行的python脚本的运行时间进行计时进行了粗略的测试,结果以很小的优势支持(1),尽管我认为那可能只是噪音。

1 个答案:

答案 0 :(得分:0)

好的,我做了更多的研究,结果发现SQLAlchemy在Google网上论坛上的邮件列表中可能有一个答案。积分归西蒙·金先生(Simon King)提供以下答案:

  

我认为处理大块行的想法是限制   Python进程的内存使用情况。在您调用session.flush()之前,   您所有的修改都保存在内存中。对于少量行   这不是问题,但对于大量用户来说可能是这样。

     

在实践中,此示例实际上可能没有什么不同,   因为默认的会话配置是每当您自动刷新   调用session.query()。

     

关于它是否比Table.update()更受青睐,这取决于   在您的用例上。 Table.update()通常会更快,因为所有   该工作将由数据库本身完成。如果你是改变   尝试使可以用SQL表示(即他们没有   复杂的依赖关系或需要外部信息),而您   如有必要,很高兴在以后重新同步您的会话,然后   Table.update()很好。

     

希望有帮助,

     

西蒙(Simon)