有什么理由不使用自动提交吗?

时间:2019-09-02 18:48:55

标签: python postgresql psycopg2

我正在使用pyscopg2来管理一些Postgresql数据库连接。

我发现here,在docs中,psycopg2似乎将非自动提交模式模拟为默认模式。还有postgresql treats every statement as a transaction,基本上是自动提交模式。

我的疑问是,如果psycopg和postgresql都保持默认模式,则发生哪种情况?或如果两者都不是,那究竟会发生什么。任何性能建议也将不胜感激。

     Code                  Psycopg2                   Postgresql

Some statements --> One big transaction --> Multiple simple transactions
or
Some statements --> One big transaction --> Big transaction

1 个答案:

答案 0 :(得分:1)

首先,我对这两个文档的解释是,当使用postgresql运行psycopg2时,由于psycopg2已开始事务,因此默认情况下将以模拟非自动提交模式运行。当然,您可以使用autocommit=True覆盖默认设置。现在回答您的问题:

默认情况下,您将不使用autocommit=True,这将要求您在希望永久更新数据库的任何时间都进行提交。这似乎很不方便。但是在很多情况下,您需要进行多个更新,要么要么必须全部成功,要么就必须没有一个成功。如果指定了autocommit=True,则必须为这些情况显式启动事务。使用autocommit=False,您省却了必须以提交或回滚为代价来开始事务的麻烦。好像是偏爱的问题。我个人更喜欢autocommit=False

就性能而言,在许多情况下指定autocommit=True可以节省启动不必要事务的成本。但是我无法量化出真正可以节省多少性能。