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
相关产品推荐
相关产品推荐

