【问题标题】:Is there any reason not to use autocommit?有什么理由不使用自动提交吗?
【发布时间】:2019-09-15 04:40:33
【问题描述】:

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

我发现heredocs 似乎 psycopg2 默认模拟非自动提交模式。还有postgresqltreats every statement as a transaction,基本上是autocommit模式。

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

     Code                  Psycopg2                   Postgresql

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

【问题讨论】:

    标签: python postgresql psycopg2


    【解决方案1】:

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

    默认情况下,您不会使用autocommit=True,这将要求您在任何时候对您希望永久保存的数据库进行更新时进行提交。这可能看起来很不方便。但是在很多情况下,您需要进行多次更新,或者它们必须全部成功,或者没有一个必须成功。如果您指定了autocommit=True,那么您必须为这些情况显式启动事务。使用autocommit=False,您可以省去必须以始终必须执行提交或回滚为代价启动事务的麻烦。这似乎是偏好问题。我个人更喜欢autocommit=False

    就性能而言,指定autocommit=True 将在许多情况下为您节省启动不必要事务的成本。但我无法量化到底节省了多少性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 2017-07-21
      • 2015-07-24
      • 2011-01-20
      • 2018-06-15
      • 2013-10-18
      相关资源
      最近更新 更多