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
相关产品推荐
相关产品推荐

