SQLite插入报错:表record共7列但仅提供了6个插入值
报错产生原因
错误提示sqlite3.OperationalError: table record has 7 columns but 6 values were supplied的本质是插入语句未显式指定目标字段,SQLite默认会匹配record表定义的全部7个列做值映射,但你当前传入的插入值只有6个,列数和值的数量不匹配,因此触发报错。
绝大多数场景下多出来的第7个列是建表时添加的自增主键字段(比如常见的id INTEGER PRIMARY KEY AUTOINCREMENT),写插入逻辑时没有把这个字段计入,又没指定要插入的具体字段,就会出现这个问题。
修复方案
最稳妥的修复方式是在INSERT语句中显式声明你要插入的6个字段,不要依赖表的默认列顺序匹配,这种写法兼容性最好,后续就算表结构调整也不容易触发同类错误。
修改后的可运行代码如下:
name, email, contact, gender, country, password = "Rodney", "rodney@gmail.com", "0717405766", "male", "kenya", "12345" cur.execute( "INSERT INTO record (name, email, contact, gender, country, password) VALUES (:name, :email, :contact, :gender, :country, :password)", { 'name': name, 'email': email, 'contact': contact, 'gender': gender, 'country': country, 'password': password } ) # 执行提交后数据才会真正写入数据库 conn.commit()
如果你确实需要给第7个列赋值,可以在字段列表和参数字典里补全对应字段和值即可;如果第7列是自增主键,不需要手动传值,用上面的写法就可以正常插入,自增字段会自动生成对应值。
注意:不推荐使用
INSERT INTO 表名 VALUES(...)省略字段列表的写法,这种写法强依赖建表时的列顺序,只要后续给表加字段、调整字段顺序就会直接触发插入错误。
内容的提问来源于stack exchange,提问作者Skully
相关产品推荐
相关产品推荐

