You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python 2.7将CSV导入MySQL遇报错,求问题排查解决

解决Python导入CSV到MySQL时的执行报错问题

看起来你在把CSV导入MySQL的过程中踩了几个新手常见的坑,我来帮你逐个梳理并修正:

你的代码里的核心问题

  • 文件打开方式错误:Python中打开文件应该用open()函数,而非直接调用file(),而且推荐用with语句自动管理文件资源,避免遗漏关闭操作。
  • SQL参数传递方式错误:你把SQL语句和参数打包成一个元组传给cursor.execute(),但正确用法是把SQL语句作为第一个参数,参数列表作为第二个独立参数。另外,直接用%s/%d拼接字符串不仅有SQL注入风险,还会因CSV读取的全是字符串,硬转%d导致类型转换报错。
  • 缺少事务提交:MySQL默认是手动提交事务的,若没执行conn.commit(),数据不会真正写入数据库。

修正后的完整代码示例

import csv
import mysql.connector

# 替换成你的数据库连接信息
conn = mysql.connector.connect(
    host='你的主机地址',
    user='你的用户名',
    password='你的密码',
    database='你的数据库名'
)
cursor = conn.cursor()

# 用with语句安全打开CSV文件,指定合适编码避免乱码
with open('20184329:2143.csv', 'r', encoding='utf-8') as csv_file:
    file_reader = csv.reader(csv_file)
    # 若CSV有表头,执行这行跳过;没有就删除该行
    next(file_reader)
    
    # 用%s作为参数占位符,MySQL会自动处理类型转换
    sql_insert = """INSERT INTO STAGING(ADRESSE_1600 , ADRESSE_1601, ADRESSE_1602, ADRESSE_1603) VALUES (%s, %s, %s, %s)"""
    
    for row in file_reader:
        # 确保每行数据的字段数和表字段匹配,避免参数数量错误
        if len(row) == 4:
            cursor.execute(sql_insert, row)

# 提交事务,将数据写入数据库
conn.commit()

# 关闭游标和连接,释放资源
cursor.close()
conn.close()

额外注意事项

  • 数据类型匹配:如果ADRESSE_1601ADRESSE_1602是整数类型,CSV对应的列必须是合法数字字符串,否则插入会报错。遇到非数字情况,要先做数据清洗(比如判断是否可转int、处理空值)。
  • 批量插入优化:若CSV数据量很大,推荐用cursor.executemany(sql_insert, rows_list)批量插入,比逐行插入效率高很多。

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

火山引擎 最新活动