Python 什么';在pyscopg2中处理事务的首选方式是什么?
根据,我们应该设置Python 什么';在pyscopg2中处理事务的首选方式是什么?,python,postgresql,psycopg2,python-db-api,Python,Postgresql,Psycopg2,Python Db Api,根据,我们应该设置autocommit,以获得默认的PostgreSQL行为。根据研究,这似乎是首选的方法。我的问题是,如果这是这些情况下的最佳方法,那么如何明确启动事务?使用光标执行(“开始”) 另一方面,psycopg2提供的上下文管理器如何处理这个问题?他们会在块的开头自动启动事务并在成功时提交吗?psycopg2的事务模型有点像JDBC 要打开事务,请关闭自动提交,然后开始工作。不需要显式的BEGIN 要提交,请使用conn.commit() 如果每条语句都是一个事务,那么自动提交就可以
autocommit
,以获得默认的PostgreSQL行为。根据研究,这似乎是首选的方法。我的问题是,如果这是这些情况下的最佳方法,那么如何明确启动事务?使用光标执行(“开始”)
另一方面,psycopg2提供的上下文管理器如何处理这个问题?他们会在块的开头自动启动事务并在成功时提交吗?psycopg2的事务模型有点像JDBC 要打开事务,请关闭自动提交,然后开始工作。不需要显式的
BEGIN
要提交,请使用conn.commit()
如果每条语句都是一个事务,那么自动提交就可以了。那么就不需要显式的事务管理。就我个人而言,我从不使用
autocommit
,几乎总是使用和语法
with psycopg2.connect(DSN) as conn:
with conn.cursor() as curs:
curs.execute(SQL)
一旦退出上下文管理器,它就会被提交
同样地
with psycopg2.connect(DSN) as conn:
with conn.cursor() as curs:
curs.execute(SQL)
raise Exception("I changed my mind")
将导致安全回滚SQL
语句
with
在Python中非常有用,只适用于少数需要严格控制对象生命周期的情况,例如当对象创建和销毁与事务行为相关联时