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

Python使用SQLAlchemy执行PostgreSQL查询出现KeyError如何解决

问题原因

你编写的SQL语句中%(23658989187|23658988997|23658989130)的写法,被pandas+SQLAlchemy的底层逻辑识别为命名参数占位符,框架会自动尝试从你传入的params参数中匹配对应key的取值做替换。由于你没有传入对应参数,因此直接抛出KeyError。
而Postico是直接将完整语句发送到PostgreSQL服务端执行,不会做本地的参数解析替换,所以相同语句可以正常运行。

解决方案

方案1:转义百分号(快速修复)

将SQL语句中所有需要作为普通字符处理的%替换为%%,框架就会将其识别为普通字符,不会当作参数占位符处理,修改后代码如下:

query = '''
select *
from <table_name>
where data similar to '%%(23658989187|23658988997|23658989130)%%'
limit 10;
'''

df = pd.read_sql_query(query, connection)
df

方案2:显式传参(更规范,防SQL注入)

不要把匹配条件硬编码在SQL语句里,通过pandas.read_sql_query的params参数传入匹配规则,不需要转义,也更安全:

query = '''
select *
from <table_name>
where data similar to %(pattern)s
limit 10;
'''
params = {"pattern": "%(23658989187|23658988997|23658989130)%"}
df = pd.read_sql_query(query, connection, params=params)
df

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:06:03