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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:18:30