Psycopg3 v3.1.12设置PostgreSQL隔离级别1失败求助
解决方案:Psycopg v3 设置事务隔离级别
问题原因
Psycopg v3 与 v2 的 API 存在差异:
Transaction对象没有set_isolation_level方法,这是 v2 的用法- 连接对象的隔离级别设置不再通过方法调用,而是直接修改属性,或在事务启动时指定
具体解决方案
PostgreSQL 中隔离级别 1 对应 READ UNCOMMITTED,以下三种方式均可实现需求:
1. 启动事务时直接指定隔离级别(推荐)
使用 transaction() 方法的 isolation_level 参数,可传入枚举值或数字:
from psycopg import IsolationLevel # 方式一:使用枚举值(可读性更高) with self.pg_connection.transaction(isolation_level=IsolationLevel.READ_UNCOMMITTED) as tx: # 执行你的数据库操作 self.pg_connection.execute("SELECT * FROM your_table;") # 方式二:直接传入数字1 with self.pg_connection.transaction(isolation_level=1) as tx: # 执行你的数据库操作 pass
2. 设置连接的默认隔离级别
如果所有事务都需要使用该级别,可在连接创建后修改默认隔离级别:
self.pg_connection = psycopg.connect( ( "dbname=" + os.environ["PG_DB"] + " user=" + os.environ["PG_USER"] + " password=" + os.environ["PG_PASS"] + " host=" + os.environ["PG_HOST"] + " port=" + os.environ["PG_PORT"] ), row_factory=dict_row, autocommit=False, ) # 使用枚举值 self.pg_connection.isolation_level = IsolationLevel.READ_UNCOMMITTED # 或直接用数字 # self.pg_connection.isolation_level = 1 # 后续启动的事务都会默认使用该隔离级别 with self.pg_connection.transaction() as tx: pass
3. 执行SQL语句手动设置
在事务内部执行 SET TRANSACTION 语句:
with self.pg_connection.transaction() as tx: # 手动设置隔离级别 self.pg_connection.execute("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;") # 执行后续数据库操作 pass
内容的提问来源于stack exchange,提问作者renaise21
相关产品推荐
相关产品推荐

