Python操作SQLite自增主键表插入报错:列数不匹配与DEFAULT语法问题
解决SQLite自增主键插入时的列数不匹配问题
你的问题出在插入语句没有正确处理自增主键voter_id,以下是两种可行的解决方法:
方法一:指定要插入的列名(推荐)
因为voter_id是自增主键,SQLite会自动为其生成值,所以插入时只需明确列出需要赋值的4个字段,跳过voter_id即可,这样就不会出现列数不匹配的问题。
Python代码示例:
import sqlite3 # 连接数据库 conn = sqlite3.connect('your_database.db') cursor = conn.cursor() # 定义带列名的INSERT语句 insert_sql = ''' INSERT INTO voting_page (voter_name, occupation, voter_age, candidate_name) VALUES (?, ?, ?, ?) ''' # 准备插入数据 voter_data = ("Alice", "Teacher", 28, "Bob") cursor.execute(insert_sql, voter_data) # 提交并关闭连接 conn.commit() conn.close()
方法二:为自增主键传入NULL值
SQLite规定,当自增主键字段传入NULL时,会自动生成下一个自增值。你可以在INSERT语句中包含voter_id列,对应位置传入NULL:
Python代码示例:
import sqlite3 conn = sqlite3.connect('your_database.db') cursor = conn.cursor() insert_sql = ''' INSERT INTO voting_page (voter_id, voter_name, occupation, voter_age, candidate_name) VALUES (NULL, ?, ?, ?, ?) ''' voter_data = ("Charlie", "Doctor", 35, "David") cursor.execute(insert_sql, voter_data) conn.commit() conn.close()
为什么加DEFAULT会报错?
SQLite的VALUES子句中不能直接使用DEFAULT关键字(除非是INSERT ... DEFAULT VALUES这种全表默认值的场景,不适用于你的需求)。对于自增主键,直接跳过该列或传入NULL是合规的写法。
内容的提问来源于stack exchange,提问作者Justin Habel Kiswanto
相关产品推荐
相关产品推荐

