使用pyodbc导入JSON至SQL数据库遇列不匹配错误
问题解决方法
你的报错核心原因是把整个JSON字符串作为单个值传入INSERT语句,但SQL表包含多个列,传入的值数量和表定义的列数不匹配,直接给你修正后的实现方案:
1. 修正数据处理逻辑
不要把整个JSON转成字符串,而是从解析后的JSON字典里提取每个字段的对应值,注意用Python的None代替字符串"NULL"——pyodbc会自动把None转换成SQL的NULL值,避免类型不匹配问题:
# 假设data是API返回的JSON解析后的字典 data = { "id": "unique id string", "created_at": None, "creator_id": "creator_id", "updated_at": None, "updater_id": "updater_id", "name": "Name" }
2. 修改INSERT语句
明确指定要插入的列名,然后按列顺序传入对应字段的值:
# 构造指定列的INSERT语句 insert_sql = """ INSERT INTO SQLTable (id, created_at, creator_id, updated_at, updater_id, name) VALUES (?, ?, ?, ?, ?, ?) """ # 执行插入,按列顺序传入参数 self.cursor.execute(insert_sql, data["id"], data["created_at"], data["creator_id"], data["updated_at"], data["updater_id"], data["name"]) # 提交事务(必须执行,否则数据不会写入数据库) self.connection.commit()
补充说明
- 原代码的错误本质:
INSERT INTO SQLTable VALUES (?)只传了一个JSON字符串值,但你的表有多个列,SQL引擎无法匹配列与值的对应关系,因此抛出Column name or number of supplied values does not match table definition错误。 - 如果你的SQL表还有其他必填列,需要在INSERT语句的列列表和参数中补充对应的值。
内容的提问来源于stack exchange,提问作者fabilbng
相关产品推荐
相关产品推荐

