Python中MySQL SELECT查询使用变量触发SQL语法错误的求助
搞定你的MySQL参数化查询语法错误
嘿,我马上就发现问题所在了!你的代码里有两个小细节没处理对,才导致了这个SQL语法错误,咱们一步步来修正:
问题1:参数传递的格式不对
MySQL Connector/Python 的 cursor.execute() 方法要求第二个参数必须是可迭代对象(比如元组、列表)——哪怕你只有一个参数,也不能直接传单个变量。你直接传Var1的话,驱动会把它当成字符序列拆分,导致%s没有被正确替换,进而触发SQL语法错误。
问题2:变量名大小写不匹配
Python是大小写敏感的,你定义的变量是var1,但执行查询时写的是Var1,这要么会导致变量未定义错误,要么会传递错误的值(如果Var1刚好存在的话)。
修正后的代码
var1 = "World" selectQ = """SELECT name, score FROM score WHERE category = %s""" # 用元组传递参数(逗号不能少,确保是单元素元组),同时修正变量名 cursor.execute(selectQ, (var1,))
为什么这样改?
- 加个逗号写成
(var1,)是Python定义单元素元组的标准方式,这样驱动程序会正确识别这是一个包含单个参数的集合,把%s替换为"World",还会自动处理字符串转义,避免SQL注入风险。 - 修正变量名后,才能正确引用你之前定义的
"World"值,不会出现变量找不到的问题。
这样修改后,你的查询应该就能正常执行啦!
内容的提问来源于stack exchange,提问作者Dandy
相关产品推荐
相关产品推荐

