Python执行SQLite UPDATE语句报错:占位符与值数量不匹配
SQLite UPDATE语句报错的修复方案
你的代码存在三个关键问题,逐个解决就能搞定:
- 缺少SQL核心关键字:UPDATE语句必须用
SET指定要更新的列,你的代码里漏了这个关键字,这是语法层面的错误。 - 占位符被错误转义:你给
?加了单引号,数据库会把'?'当成普通字符串字面量,根本不会识别为参数占位符,导致系统检测到占位符数量(0个)远少于传入的参数数量(4个),触发报错。 - 参数传递格式不规范:sqlite3执行带参数的SQL时,参数最好打包成元组形式传递,避免解析异常。
修正后的可运行代码
db.execute("UPDATE birthdays SET name = ?, month = ?, day = ? WHERE id = ?", (name, month, day, id))
错误代码对比说明
原错误代码:
db.execute("UPDATE birthdays name = '?', month = '?', day = '?' WHERE id = '?'", name, month, day, id)
- 补上
SET关键字,符合SQL UPDATE的标准语法结构 - 移除占位符
?周围的单引号,让数据库正确识别参数位置 - 将参数打包为元组
(name, month, day, id),适配sqlite3的参数传递规则
另外你提到直接在SQLite中运行的语句能成功,大概率是你实际运行时补了SET关键字(标准SQL不允许省略),只是写出来的时候漏了。
内容的提问来源于stack exchange,提问作者Juice Milner
相关产品推荐
相关产品推荐

