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

如何使用Python将pandas导出的多组字典数据批量插入MySQL数据库

问题根因
  • 你调用df.to_dict()时用了默认参数,返回的是{列名: {行号: 行值}}的嵌套字典结构,data.get('nik')获取的是整列nik的所有数据,不是单行对应的值,不符合executemany要求的「单行参数组成的元组列表」格式
  • 字段映射逻辑不对:你SQL语句插入的是name和address两个字段,但取值用了nik和first_name,需要你根据实际业务需求调整字段映射规则,下面示例默认你要把nik作为address、first_name拼接last_name作为name插入,可自行修改
  • 如果代码里的curMysql没有提前定义,调用cursor传参会直接报错,没有特殊需求不需要传这个参数
调整后可用代码
@app.route('/karyawan-import-excel')
def import_excel():
    df = pd.read_excel(r'C:\xampp\htdocs\python\coba_read_write_excel\testing.xlsx')
    # 转换为 每行一个字典 的列表格式
    records = df.to_dict(orient='records')
    
    cur = mysql.connection.cursor()
    sql = "INSERT INTO zzz_customers (name, address) VALUES (%s, %s)"
    # 遍历每行数据构造参数元组列表
    val = []
    for row in records:
        # 这里的字段映射规则可根据你的实际需求修改
        full_name = f"{row['first_name']} {row['last_name']}"
        address = str(row['nik'])
        val.append((full_name, address))
    
    cur.executemany(sql, val)
    mysql.connection.commit()
    # 操作完成后关闭游标
    cur.close()
    return "数据导入成功"
可选优化点
  • 增加异常捕获和事务回滚逻辑,避免部分数据导入成功、部分失败的脏数据问题
  • 数据量超过1000条时可以分批插入,避免单次提交数据量过大导致接口超时
  • 插入前增加字段格式、非空校验,提前过滤不符合要求的数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:15:03