在PostgreSQL和Psycopg2中自动提交的含义是否相同?
从PostgreSQL手册
默认情况下(没有BEGIN), PostgreSQL以“自动提交”模式执行事务,即,每个语句都以自己的方式执行 交易和在语句末尾隐式执行一次提交(如果执行成功, 否则将完成回滚)。
这是否意味着自动提交将为每个命令创建一个事务?
可以在自动提交模式下设置连接: 所有执行的命令将立即提交的方式 回滚是可能的。一些命令(例如CREATE DATABASE,VACUUM…) 要求在任何事务之外运行:以便能够运行 这些来自Psycopg的命令,连接必须处于自动提交状态 模式:您可以使用自动提交属性。
psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT
在执行命令且没有commit()时不启动任何事务 或rollback()是必需的。一些PostgreSQL命令,例如 CREATE DATABASE或VACUUM无法遇到事务:要运行这样的事务 命令使用:
>>> conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
“所有执行的命令将立即提交”是否意味着Psycopg2中的自动提交会为每个命令创建一个事务?
“执行命令时不需要启动事务,不需要commit()或rollback()”是否意味着Psycopg2中的自动提交将阻止为每个命令创建事务?
“某些PostgreSQL命令(如CREATE DATABASE或VACUUM无法运行到事务中:要运行此命令,启用自动提交模式”)意味着Psycopg2中的自动提交将阻止仅为某些命令(CREATE DATABASE或VACUUM)创建的事务)?
谢谢。
答案 0 :(得分:3)
每个PostgreSQL语句都在事务中运行。
PostgreSQL本身 only 知道自动提交模式,这意味着如果您不显式启动事务,则每个语句将在其自己的事务中运行。
像VACUUM
这样的语句不能与其他语句在同一事务中运行。
如果您没有在psycopg2中使用自动提交,则驱动程序必须通过在运行第一条语句时显式启动事务来模拟非自动提交模式。