Python3.9调用PostgreSQL添加NOT LIKE条件后报错求助
问题解决
- 报错根源:Python的PostgreSQL数据库驱动会把SQL语句里的
%识别为参数占位符,而非SQL原生的通配符- 添加
track NOT LIKE '%KSA%'时,驱动将两个%判定为需要填充的参数位,但你只传入了2个业务参数,参数数量不匹配触发IndexError - 改成
%(KSA)%时,驱动会把(KSA)当成命名参数,试图从元组里按字符串键取值,但元组仅支持索引访问,因此触发TypeError
- 添加
- 修复方案:把SQL里的单个
%替换为%%,让驱动将其解析为SQL通配符传递给PostgreSQL执行
修正后的代码:
cross_cross_OFR_SQL = ''' SELECT DISTINCT ON (racedate) * FROM testview WHERE track NOT LIKE '%%KSA%%' AND horsename = %s AND racedate > %s ORDER BY racedate ASC LIMIT 2 ''' cur.execute(cross_cross_OFR_SQL, (cross_detailedhorse, past_racedate,)) cross_cross_OFR_SQLR = cur.fetchall()
- 补充说明:PGadmin4里直接写
%KSA%能正常运行,是因为它不会把%当成参数占位符,会直接将完整语句传给PostgreSQL执行
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

