You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 23:54:56