使用pyodbc执行双参数查询时持续报HYC00错误求助
问题描述
使用pyodbc执行带两个参数的查询时,始终触发错误:pyodbc.Error: ('HYC00', '[HYC00] Unknown statement option (Set) (10) (SQLSetStmtAttr)')。仅使用单个参数时查询可正常运行,所有修复尝试均未解决问题。
报错代码
name = "'Test'" street = "'TestStreet'" testQuery = "SELECT * FROM Users WHERE name = ? and street = ?" testRes = dbCon.cursor() params = (name, street) testRes.execute(testQuery, params)
已尝试的写法
- 移除参数的手动单引号:
name = "Test" street = "TestStreet"
- 直接传递元组参数:
testRes.execute(testQuery, (name, street))
- 传递带单引号的元组参数:
testRes.execute(testQuery, ("'Test'", "'TestStreet'"))
解决方案
这个错误大多和ODBC驱动的兼容性或连接配置有关,试试以下几个方案:
- 更新ODBC驱动:确保使用对应数据库的最新官方驱动,比如SQL Server用ODBC Driver 17/18 for SQL Server,旧版本驱动对多参数绑定的支持可能存在缺陷。
- 调整连接字符串:在数据库连接字符串中添加
UseFMTONLY=No或QuotedId=No这类参数,部分驱动需要关闭特定兼容选项才能正常处理多参数查询。 - 更换参数传递格式:用列表替代元组传递参数,或者拆分参数逐个传入:
testRes.execute(testQuery, [name, street]) - 禁止手动添加单引号:参数化查询会自动处理字符串的引号包裹,手动加
'Test'反而会导致SQL解析错误,直接使用纯字符串"Test"即可。 - 检查数据库端配置:确认数据库的SQL模式(比如MySQL的sql_mode)未开启过于严格的语法校验,避免多参数查询被拦截。
内容的提问来源于stack exchange,提问作者Itanium
相关产品推荐
相关产品推荐

