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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:22:27