我正在使用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
答案 0 :(得分:1)
首先,我对这两个文档的解释是,当使用postgresql运行psycopg2时,由于psycopg2已开始事务,因此默认情况下将以模拟非自动提交模式运行。当然,您可以使用autocommit=True
覆盖默认设置。现在回答您的问题:
默认情况下,您将不使用autocommit=True
,这将要求您在希望永久更新数据库的任何时间都进行提交。这似乎很不方便。但是在很多情况下,您需要进行多个更新,要么要么必须全部成功,要么就必须没有一个成功。如果指定了autocommit=True
,则必须为这些情况显式启动事务。使用autocommit=False
,您省却了必须以提交或回滚为代价来开始事务的麻烦。好像是偏爱的问题。我个人更喜欢autocommit=False
。
就性能而言,在许多情况下指定autocommit=True
可以节省启动不必要事务的成本。但是我无法量化出真正可以节省多少性能。