如何使用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
相关产品推荐
相关产品推荐

