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

如何将CSV数据导入SQL新表?解决ValueError报错问题

问题排查与解决

问题描述

有一个17列的CSV文件,已通过pandas转换为DataFrame,成功创建SQL的Pedido表后,使用itertuples()循环插入数据时触发错误:ValueError: too many values to unpack (expected 2)

错误原因

  1. 循环解包错误:df.itertuples()默认返回包含行索引的命名元组,结构为(索引值, 列1值, 列2值, ...)。代码中用for index, row in df.itertuples()尝试将该元组拆分为两个变量,但元组元素数量远大于2,导致解包失败。
  2. 参数传递错误:cursor.execute()要求参数以元组/列表形式传入,代码中单独传递每个参数,即使解包正确也会触发参数数量不匹配的错误。

解决方法

方法1:修正循环与参数传递方式

保留itertuples()的默认行为,去掉多余的解包变量,并将参数打包为元组:

for row in df.itertuples():
    cursor.execute('''
                INSERT INTO Pedido (no_orden, codigo_producto, cantidad_orden, precio_cada, nombre_producto, linea_productos, descr, precio_compra, fecha_orden, no_cliente)
                VALUES (?,?,?,?,?,?,?,?,?,?)
                ''', 
                (row.no_orden,
                row.codigo_producto, 
                row.cantidad_orden,
                row.precio_cada,
                row.nombre_producto,
                row.linea_productos,
                row.descr,
                row.precio_compra,
                row.fecha_orden,
                row.no_cliente)
        )
conn.commit()

方法2:移除索引后直接传元组

使用itertuples(index=False)让返回的元组不包含索引,直接将元组作为参数传入:

for row in df.itertuples(index=False):
    cursor.execute('''
                INSERT INTO Pedido (no_orden, codigo_producto, cantidad_orden, precio_cada, nombre_producto, linea_productos, descr, precio_compra, fecha_orden, no_cliente)
                VALUES (?,?,?,?,?,?,?,?,?,?)
                ''', 
                row
        )
conn.commit()

方法3:批量插入(推荐)

避免循环插入的低效问题,使用pandas内置的to_sql()方法批量写入数据:

from sqlalchemy import create_engine

# 根据你的数据库类型修改连接字符串,示例为SQLite
engine = create_engine('sqlite:///你的数据库文件.db')
# 筛选需要插入的列(与Pedido表列对应),批量写入
target_columns = ['no_orden', 'codigo_producto', 'cantidad_orden', 'precio_cada', 'nombre_producto', 'linea_productos', 'descr', 'precio_compra', 'fecha_orden', 'no_cliente']
df[target_columns].to_sql('Pedido', engine, if_exists='append', index=False)

内容的提问来源于stack exchange,提问作者David Vazquez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:05:51