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

CSV转SQLite时绑定参数数量不匹配问题求助

问题解决代码及解释

修正后的代码

seen = set()
# 确保con和cur已完成SQLite连接与游标初始化
with open("E:/Forage/Walmart/task4/shipping_data_1.csv", 'r') as file:
    next(file)  # 跳过CSV表头(如果文件包含表头)
    for row in file:
        row = row.strip()  # 去除行首尾的空白和换行符
        if row in seen:
            continue
        seen.add(row)
        # 取分割后的前2列数据,适配目标表的2列需求
        data = row.split(',')[:2]
        cur.execute("INSERT INTO product VALUES(?, ?)", data)
    con.commit()  # 循环结束后统一提交,提升操作效率
con.close()

错误原因解析

  • 第一个参数数量错误:CSV每行分割后得到3个元素,而目标表仅需2列,直接传入会导致参数数量不匹配,需要舍弃第三列。
  • 第二个参数数量错误:row.split(',').pop()返回的是单个字符串(被移除的第三列内容),SQLite会把这个字符串拆成单个字符作为绑定参数,比如字符串长度为8就会生成8个值,和语句需要的2个完全不匹配。正确做法是保留分割后的列表(取前2个元素,或pop后剩下的列表)。
  • 缩进逻辑错误:原代码中seen.add(row)、cur.execute等语句在for循环外,导致只会处理最后一行数据,且去重逻辑完全失效。
  • 去重逻辑漏洞:原始row包含换行符,直接存入seen会让相同内容但换行符不同的行被误判为不重复,用strip()处理后可以避免这个问题。

内容的提问来源于stack exchange,提问作者No Name

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:10:23