sqlite3将单个绑定字符串识别为多个绑定的报错问题如何解决?
报错触发原因
Python的语法规则中,仅用括号包裹单个元素不会被识别为元组类型,("blah") 本质就是普通的字符串对象。sqlite3 的 cursor.execute() 方法要求传入的参数绑定序列是可迭代对象,当你传入字符串时,程序会将字符串按单个字符拆分迭代:长度为4的blah会被拆为4个独立字符,被识别为4个绑定参数;长度为8的blahblah会被拆为8个独立字符,被识别为8个绑定参数,与SQL语句中声明的1个占位符数量不匹配,因此抛出对应错误。
修复方案
- 方案一:明确声明单元素元组,在元素末尾追加逗号即可:
将原调用代码修改为:cursor.execute("INSERT INTO program_types VALUES(NULL, ?);", ("blah",)) - 方案二:使用列表传递绑定参数,规避单元素元组的语法歧义:
调用代码可写为:cursor.execute("INSERT INTO program_types VALUES(NULL, ?);", ["blah"])
内容的提问来源于stack exchange,提问作者Autodidactyle
相关产品推荐
相关产品推荐

