Python使用sqlite3执行SQL时如何传参?自增列插入报错怎么解决
问题原因
- 你的INSERT语句没有指定插入对应的列名,SQLite会默认要求传入建表顺序下所有列的参数,你的Animes表共有ID、Name、GenreID 3个列,你只传入了2个参数,参数数量不匹配触发报错。
- 自增主键虽然无需手动赋值,但不明确指定插入列的情况下,SQLite不会自动跳过ID列做值生成。
解决方案
推荐使用指定插入列名的写法,明确排除需要自动生成的ID列,数据库会自动为自增主键赋值,代码修改如下:
name = "Boruto" genreid = 1 # 明确指定插入的列是Name和GenreID,ID列由数据库自动生成 c.execute('''INSERT INTO Animes (Name, GenreID) VALUES(?,?)''',(name,genreid)) conn.commit() conn.close()
如果需要省略列名,也可以给ID列传入NULL占位触发自增逻辑,写法如下:
c.execute('''INSERT INTO Animes VALUES(NULL, ?,?)''',(name,genreid))
注:更推荐第一种指定列名的写法,后续如果表结构新增列时也不会受影响,可读性和可维护性更高。
内容的提问来源于stack exchange,提问作者ShadowPoke3
相关产品推荐
相关产品推荐

