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

sqlite3插入自增主键报绑定数错误,自增字段该如何传参?

问题原因

你的INSERT语句显式指定了要插入file_number、file_id两个字段,VALUES子句对应写了2个占位符?,但执行cur.execute时你只传入了1个参数file_id,参数数量和占位符数量不匹配,所以触发了绑定错误。

虽然file_number是自增主键,但只要你在INSERT的字段列表里写了这个字段,就必须给它传对应的值,不能缺省。

解决方案

有两种常用的处理方式,更推荐第一种:

方案1:INSERT语句不指定自增主键字段(推荐)

直接省略字段列表里的file_number,SQLite会自动为INTEGER PRIMARY KEY类型的字段分配唯一的自增整数值,不需要你手动传参。
修改后的add方法代码如下:

def add(self, file_id):
    """Agrega una file_id a la base de datos"""
    # 字段列表只写需要手动插入的file_id即可
    _insert = f"""INSERT or IGNORE INTO {self._name}(file_id)
    VALUES(?)"""
    cur = self.db.cursor()
    cur.execute(_insert, [file_id])
    self.db.commit()
    cur.close()

方案2:显式给自增主键传NULL值

如果你需要保留原有INSERT语句的字段列表写法,只需要给file_number对应传None即可,SQLite遇到给INTEGER PRIMARY KEY传NULL的情况,会自动生成自增数值。
修改后的cur.execute行代码如下:

cur.execute(_insert, [None, file_id])
补充说明

如果插入完成后需要拿到刚生成的自增file_number值,可以在cur.execute执行后读取cur.lastrowid属性获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:57:00