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

Python连接PostgreSQL查询报错:事务中止问题求助

解决Python连接PostgreSQL过滤数据时的InFailedSqlTransaction错误

问题根源及修复步骤

1. 修复连接字符串的语法错误

你的连接代码中host参数存在双引号嵌套错误,这会直接导致连接失败并触发事务中止:
原错误代码:

conn = psycopg2.connect(dbname = "Database", user = "DB_User", password = "DB_Pwd!", host = ""DB_Host, port = "4321") 

修正后:

conn = psycopg2.connect(dbname="Database", user="DB_User", password="DB_Pwd!", host="DB_Host", port="4321") 

2. 处理事务中止状态

PostgreSQL事务出错后,必须手动回滚才能继续执行后续命令。建议添加异常处理捕获错误并回滚:

import psycopg2

try:
    conn = psycopg2.connect(dbname="Database", user="DB_User", password="DB_Pwd!", host="DB_Host", port="4321")
    cur = conn.cursor()
    # 单个值过滤用!=更直观,和NOT IN功能等价
    cur.execute("SELECT * FROM table_name WHERE Source_Format != %s", ('Weeks',))
    results = cur.fetchall()
    # 查询操作无需提交,若有修改操作需执行conn.commit()
except psycopg2.Error as e:
    print(f"数据库错误: {e}")
    if conn:
        conn.rollback()
finally:
    # 关闭资源
    if cur:
        cur.close()
    if conn:
        conn.close()

3. 多值过滤场景的写法(可选)

如果后续需要过滤多个值,可继续使用NOT IN并传递元组参数:

cur.execute("SELECT * FROM table_name WHERE Source_Format NOT IN (%s, %s)", ('Weeks', 'Months'))

报错提示InFailedSqlTransaction: current transaction is aborted, commands ignored until end of transaction block本质是之前的操作(比如连接失败)导致事务进入中止状态,必须回滚后才能执行新命令。

内容的提问来源于stack exchange,提问作者Bhuvnesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:45:19