Pyodbc操作Access时,文本字段Where查询报错求助
问题解答:pyodbc查询Access文本字段报错"Too few parameters"
问题原因
你写的SQL语句里,文本值LongSword没有用引号包裹,Access会把它识别为一个未定义的参数,而非字符串字面量,因此抛出"Too few parameters"错误。而数字类型的ID字段不需要引号,所以ID = 1可以正常执行。
解决方法
有两种可行的修复方式:
1. 给文本值添加引号
直接在SQL语句里给字符串值加上单引号(注意转义或者用不同引号包裹SQL语句):
# 用双引号包裹整个SQL语句,内部用单引号标记字符串值 cursor.execute("select * from Weapons where WeaponName = 'LongSword'") # 或者转义单引号,用单引号包裹SQL语句 cursor.execute('select * from Weapons where WeaponName = \'LongSword\'')
2. 使用参数化查询(推荐)
这是更安全的做法,能避免SQL注入问题,同时不用手动处理引号:
cursor.execute('select * from Weapons where WeaponName = ?', ('LongSword',))
pyodbc使用?作为参数占位符,将实际参数以元组形式传递给execute方法,数据库会自动处理类型匹配和引号添加。
内容的提问来源于stack exchange,提问作者Toby Wilson
相关产品推荐
相关产品推荐

