You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决sqlite3.ProgrammingError:需5个绑定参数但提供了8个

错误原因

  • executemany 用于批量执行多条相同结构的SQL语句,要求传入的第二个参数是由多个参数元组组成的可迭代对象,比如 [(参数组1), (参数组2)] 这种格式。你现在只插入单条数据,直接传了单个参数元组dati,executemany会把你传的元组里的每个元素当成单独的参数组遍历,再把每个字符串元素拆成单个字符作为绑定参数,自然就出现参数数量不匹配的报错。
  • 你写的'{pat}'没有加f前缀,不会实际替换为变量pat的值,只会把{pat}作为普通字符串存入数据库,达不到你要的取值效果。
  • 不需要手动给SQL参数加引号,sqlite的参数绑定机制会自动处理数据类型,手动拼接反而有SQL注入的风险。

修复方案

单条插入直接用cursor.execute()方法,直接传变量作为参数即可,不需要手动做字符串格式化:

tableframe="CREATE TABLE IF NOT EXISTS frames(frame_id INTEGER PRIMARY KEY, nameframe_path TEXT, timestamp TEXT, accelerometro TEXT, giroscopio TEXT, magnetometro TEXT) "
cursor.execute(tableframe)    
for ele in lol:
        for pat in paths:
            if re.search(ele[0],pat):
                # 直接传入变量,不需要手动格式化字符串
                dati=(pat, ele[0], ele[1], ele[2], ele[3])
                # 单条插入用execute即可
                cursor.execute("INSERT INTO frames(nameframe_path, timestamp, accelerometro, giroscopio, magnetometro) VALUES (?,?,?,?,?)", dati)    

如果你后续需要扩展为批量插入,坚持要用executemany,需要把单个参数元组套在外层可迭代对象里:

# 仅作批量插入语法示例,单条插入不推荐该写法
cursor.executemany("INSERT INTO frames(nameframe_path, timestamp, accelerometro, giroscopio, magnetometro) VALUES (?,?,?,?,?)", [dati])

内容的提问来源于stack exchange,提问作者Salvatore Pennisi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:30:00