我在摆弄psycopg2,虽然有一个.commit()和.rollback(),但没有.begin()或类似的方法来启动事务,或者看起来是这样? 我希望能做到
db.begin() # possible even set the isolation level here
curs = db.cursor()
cursor.execute('select etc... for update')
...
cursor.execute('update ... etc.')
db.commit();
那么,事务如何与psycopg2一起工作呢? 如何设置/更改隔离级别?
使用
db.set_isolation_level(n)
,假设db
是连接对象。正如Federico写的here,n
的意思是:正如所记录的here,
psycopg2.extensions
为您提供符号常量:python标准DB API的
BEGIN
总是隐式的。当您开始使用数据库时,驱动程序会发出一个BEGIN
,并且在发出任何COMMIT
或ROLLBACK
之后,会发出另一个BEGIN
。符合规范的python DB API应该总是这样工作的(不仅仅是postgresql)。如Alex Martelli所指出,您可以使用
db.set_isolation_level(n)
将隔离级别更改为autocommit。正如Tebas所说,begin是隐式的,但在执行SQL之前不会执行,因此如果不执行任何SQL,则会话不在事务中。
我更愿意明确地看到我的交易在哪里:
相关问题 更多 >
编程相关推荐