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

pyodbc连接Amazon RDS PostgreSQL执行SQL报语法错误如何解决

问题背景
  • 已完成pyodbc与Amazon RDS PostgreSQL的连接配置,安装了psqlodbc(对应PostgreSQL Unicode(x64) ODBC驱动),连接建立环节无异常
  • 运行环境为Python 3.7
  • 环境限制:公司禁用pip安装权限,无法升级现有软件包,仅可使用指定范围内的已安装包(包含pyodbc)
  • 故障表现:执行SQL查询时返回语法错误,自查SQL语句本身不存在语法问题

测试代码如下:

import pyodbc

mypw = 'skjhaf234234dkjhkjx'
string = 'Driver={PostgreSQL Unicode(x64)};Server=myfakeserveraddress.rds.amazonaws.com;Database=mydb;UID=myusername;PWD='+mypw+';'
connection = pyodbc.connect(string)
c = connection.cursor()
c.execute("SELECT * FROM schema_table.test_table;")

报错详情

  1. 执行上述初始代码时返回错误:

pyodbc.ProgrammingError: ('42601', '[42601] ERROR: syntax error at or near "'schema_table.test_table'";\nError while executing the query (1) (SQLExecDirectW)')

  1. 调整语句移除表名周围的引号、去掉末尾分号,执行c.execute("SELECT * from schema_table.test_table")时返回错误:

pyodbc.ProgrammingError: ('25P02', '[25P02] ERROR: current transaction is aborted, commands ignored until end of transaction block;\nError while executing the query (1) (SQLExecDirectW)')

解决步骤

两个报错分别对应不同原因,按以下操作即可修复:

  • 修复42601语法错误:在ODBC连接字符串中添加QuotedId=0参数,关闭psqlodbc驱动默认的标识符自动加引号逻辑——该逻辑会错误地将传入的模式名.表名整体作为字符串加单引号包裹,导致PostgreSQL无法识别为合法表标识符。
  • 修复25P02事务中止错误:PostgreSQL中当一个事务内某条语句执行失败后,整个事务会进入中止状态,必须先执行回滚操作才能运行后续语句。第一次报错后没有回滚事务,直接执行新语句就会触发该错误。可以在连接时设置autocommit=True自动提交单条语句,避免事务持续挂起;如果需要手动控制事务,每次执行语句捕获到错误后必须先调用connection.rollback()再执行后续操作。

修正后的可运行代码如下:

import pyodbc

mypw = 'skjhaf234234dkjhkjx'
# 连接字符串新增QuotedId=0参数,连接时开启autocommit
conn_str = 'Driver={PostgreSQL Unicode(x64)};Server=myfakeserveraddress.rds.amazonaws.com;Database=mydb;UID=myusername;PWD='+mypw+';QuotedId=0;'
connection = pyodbc.connect(conn_str, autocommit=True)
c = connection.cursor()
c.execute("SELECT * FROM schema_table.test_table")
# 后续可正常获取查询结果
res = c.fetchall()

注意:如果需要保留手动事务控制,不需要开启autocommit,只要在每次执行报错后执行connection.rollback()清空失败事务状态即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:30:49