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

无需手动录入向MySQL导入Excel数据?Python代码报错求解

问题解决:CSV导入MySQL报错及免手动录入方案

1 报错not enough arguments for format string根因

  • 直接遍历pandas DataFrame对象时,默认返回的是列名而非每行数据,你传入cursor.execute的参数实际是单个列名字符串,无法匹配SQL语句里的9个%s占位符,因此触发参数不足的报错
  • 额外冗余问题:你在循环内反复创建、关闭数据库连接,会大幅降低导入效率,也容易出现连接异常

2 原有代码修复方案

修正遍历逻辑,把连接操作移到循环外即可正常运行,修复后代码如下:

import os
import pandas as pd
import pymysql

if os.path.isfile('Desafio.csv'):
    try:
        csv = pd.read_csv("Desafio.csv", skiprows = range(0, 14))
        # 数据库连接移到循环外,只创建一次
        con = pymysql.connect(db='new_schema', user='root', passwd='password123H.')
        cursor = con.cursor()
        query = "INSERT INTO afastamentos(codigo,custo,identificacao,funcionario,cargo,data_do_afastamento,especialidade,motivo,funcionario_lider) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s);"
        # 用iterrows遍历每行数据
        for _, row in csv.iterrows():
            # 把行数据转成元组传入执行
            cursor.execute(query, tuple(row))               
        con.commit()
        print('Dados inseridos com sucesso!')
        cursor.close()
        con.close()
    except Exception as erro:
        print('Erro!', erro)

3 免手动写插入语句的高效方案

无需手动写INSERT语句、逐行赋值,直接用pandas自带的to_sql方法即可一键导入全量数据,代码更简洁,导入效率更高:

import os
import pandas as pd
from sqlalchemy import create_engine

if os.path.isfile('Desafio.csv'):
    try:
        # 读取CSV
        csv = pd.read_csv("Desafio.csv", skiprows = range(0, 14))
        # 创建数据库引擎,按实际配置调整账号密码、地址、库名即可
        engine = create_engine('mysql+pymysql://root:password123H.@localhost/new_schema')
        # 直接写入数据库,name为目标表名,if_exists='append'表示在原有表基础上追加数据,不写入索引列
        csv.to_sql(name='afastamentos', con=engine, if_exists='append', index=False)
        print('数据导入成功!')
    except Exception as erro:
        print('导入出错:', erro)

注意:使用该方案需要确保CSV的列顺序和数据库表的字段顺序一一对应,或者CSV的列名和数据库表字段名完全一致,即可自动匹配写入,不需要手动录入任何字段值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:45:04