Python参数化MySQL查询报错ProgrammingError:问题定位与解决
问题分析与解决
问题根源
代码里的cursor.execute第二个参数(select)并不是元组——Python中单个元素的元组必须在末尾加逗号,否则括号只是普通分组符号,会被识别为变量本身而非序列类型。mysql-connector的参数化查询要求第二个参数是元组、列表这类序列,无法正确解析单独的变量,导致SQL语句里的%s未被替换,直接传入数据库引发语法错误。
修正代码
把参数部分改成带逗号的元组,或者用列表:
方案1:使用带逗号的元组
select = input("ENTER USER FOR PASS RECOVERY : ") cursor.execute("SELECT COUNT(*) FROM user_stat WHERE usr=(%s)", (select,))
方案2:使用列表
select = input("ENTER USER FOR PASS RECOVERY : ") cursor.execute("SELECT COUNT(*) FROM user_stat WHERE usr=(%s)", [select])
验证说明
修改后,驱动会正确将select变量的值替换到SQL的%s占位符位置,生成合法的SQL语句,避免语法错误。
内容的提问来源于stack exchange,提问作者REZA SAEEDI
相关产品推荐
相关产品推荐

