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

Python导入CSV至MySQL报错:TypeError: 格式字符串参数不足

解决MySQLdb.ProgrammingError: not enough arguments for format string问题

核心问题与修复步骤

  • 重复字段引发参数不匹配
    你的INSERT语句字段列表里重复写了两次sales,导致VALUES部分有9个%s占位符,但CSV每行实际只有8个对应字段(对应release、official、order、date、product、client、sales、quant),参数数量和占位符数量不匹配直接触发了这个错误。
    修正字段列表,去掉重复的sales:

    cursor.execute(
        "INSERT INTO estoque1 (release, official, `order`, date, product, client, sales, quant) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", row)
    
  • 关键字冲突问题
    order是MySQL的保留关键字,直接作为字段名使用会引发语法错误,必须用反引号`包裹,上面的修正已经包含这一点。

  • 验证CSV数据一致性
    即使检查过字段对应,仍要确认CSV每行的字段数量是否统一,避免某行缺值或多值导致参数不匹配。可以在循环中加入异常行判断:

    for idx, row in enumerate(csv_data, start=2):  # start=2是跳过表头后的行号
        if len(row) != 8:
            print(f"第{idx}行数据字段数量异常,跳过:{row}")
            continue
        print(row)
        cursor.execute(
            "INSERT INTO estoque1 (release, official, `order`, date, product, client, sales, quant) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", row)
    
  • 优化代码(可选)
    用with语句管理连接和文件,避免资源泄漏:

    import MySQLdb
    import csv
    
    with MySQLdb.connect(host="127.0.0.1", user="root", password="", database="csm") as conn:
        with conn.cursor() as cursor:
            with open('teste2.csv', 'r') as f:
                csv_data = csv.reader(f)
                next(csv_data)
                for idx, row in enumerate(csv_data, start=2):
                    if len(row) != 8:
                        print(f"第{idx}行数据异常,跳过:{row}")
                        continue
                    cursor.execute(
                        "INSERT INTO estoque1 (release, official, `order`, date, product, client, sales, quant) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)",
                        row)
        conn.commit()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:55:37