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

为何使用Tuple仍触发sqlite3.ProgrammingError:绑定数量错误?

问题解决:sqlite3.ProgrammingError 参数绑定数量错误

错误根源

你在SQL语句里把参数占位符?放在了双引号内部,导致SQLite无法识别这是一个需要绑定的参数,反而将(?)当作字符串的一部分处理,自然找不到对应的绑定值,触发了参数数量不匹配的报错。

修正后的代码

@tree.command(name='search', description='search for a message by id!', guild=discord.Object(id=1025197159785693284))
async def search(intr: discord.Interaction, id: str):
    # 移除占位符周围的引号,使用标准参数绑定写法
    res = cur.execute('SELECT message FROM messages WHERE id = ?', (id, )).fetchone()
    # 增加判空逻辑,避免无匹配数据时触发索引错误
    if res:
        await intr.response.send_message(f'message {id} is: {res[0]}')
    else:
        await intr.response.send_message(f'No message found with id {id}')
    # 查询操作无需执行commit,仅写入/修改/删除操作需要
    # con.commit() 此行可删除

关键注意事项

  • SQLite的参数占位符?不需要额外添加引号,驱动会自动处理字符串转义与类型转换,同时能防范SQL注入风险。
  • commit()方法仅用于提交写入、修改、删除类的数据库操作,查询操作完全不需要调用。
  • 必须增加查询结果的判空处理,否则当目标ID不存在时,res为None,调用res[0]会引发IndexError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:20:33