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

使用Python从CSV向MySQL导入数据时出现参数未全部使用错误

问题解决:SQL参数不匹配错误

核心原因

你的SQL插入语句里用了%d作为参数占位符,但Python的MySQL驱动(如pymysql、MySQLdb)要求所有数据类型的参数占位符统一用%s——驱动会自动处理类型转换。%d会被Python当成字符串格式化符号,而非SQL参数占位符,导致实际传入的6个元组参数只匹配了5个%s,触发「参数未全部使用」的错误。

修复步骤

  1. 修正SQL占位符:把values里的%d替换成%s
  2. 优化cursor创建:将cursor实例化移到循环外,避免重复创建资源
  3. 提交事务:插入完成后调用mydb.commit(),确保数据写入数据库
  4. 可选:批量插入优化:收集所有数据后用executemany批量插入,大幅提升效率

修复后的代码

单条插入版本

import csv

# 假设mydb已经完成正确连接
cursor = mydb.cursor()
sql = ("INSERT INTO users (user_id, user_name, user_email, user_password, user_address, is_vendor)"
       " VALUES(%s, %s, %s, %s, %s, %s)")

with open("USERS.csv", "r") as f:
    data = csv.reader(f)
    for row in data:
        print(tuple(row))
        cursor.execute(sql, tuple(row))

# 提交事务,确保数据写入
mydb.commit()
cursor.close()
mydb.close()

批量插入优化版本

import csv

# 假设mydb已经完成正确连接
cursor = mydb.cursor()
sql = ("INSERT INTO users (user_id, user_name, user_email, user_password, user_address, is_vendor)"
       " VALUES(%s, %s, %s, %s, %s, %s)")
val = []

with open("USERS.csv", "r") as f:
    data = csv.reader(f)
    for row in data:
        val.append(tuple(row))
        print(tuple(row))

# 批量插入所有数据
cursor.executemany(sql, val)
mydb.commit()
cursor.close()
mydb.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:01:35