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

Python脚本无报错却未向MySQL数据库插入CSV数据求助

解决CSV数据插入MySQL表无数据的问题

嘿,我碰到过好多次这种情况——脚本跑起来没警告没报错,但数据库里啥数据都没插进去,大概率是这几个常见坑之一,咱们一步步排查:

1. 最容易忽略的:事务没提交

pymysql 默认是关闭自动提交事务的,也就是说你执行完INSERT语句后,所有操作都只是在内存的事务里,没调用connection.commit()的话,数据库根本不会持久化这些数据。这绝对是排名第一的原因!

你需要在循环插入完所有数据后,或者在函数的合适位置加上提交操作,比如:

# 所有插入操作完成后
connection.commit()

2. INSERT语句藏着问题

你代码里写的是INSERT IGNORE INTO art...,这里有几个隐患:

  • 表名是不是写错了?你要插的是articles2,但代码里写的是art...,会不会是缩写错了?
  • INSERT IGNORE会自动忽略插入时的错误(比如字段不匹配、数据类型不对、主键重复),但不会抛出任何异常,导致你根本不知道哪里错了。建议先把IGNORE去掉,运行脚本看看会不会报错,或者直接把生成的SQL语句打印出来,去MySQL客户端里执行一遍,就能立刻发现问题。

3. CSV数据根本没读对

有没有可能你的rows是空的?比如:

  • CSV文件的编码不对(比如是GBK但你用UTF-8读),导致读取失败;
  • CSV的分隔符不是逗号(比如是分号;),但你用默认的csv.reader读取,结果把整行当成一个字段;
  • 没跳过表头,导致第一行表头被当成数据插入,触发了字段类型不匹配(但因为用了IGNORE被忽略了)。

可以在调用插入函数前,先打印rows看看有没有数据:

print(rows)

给你整理的修正版示例代码

import csv
import pymysql

# 建立数据库连接
connection = pymysql.connect(
    host="localhost",
    user="root",
    passwd="你的密码",
    db="city_details"
)
cursor = connection.cursor()

def insert_articles2(rows):
    try:
        # 假设你的articles2表有三个字段:title, content, city,根据实际情况修改
        sql = "INSERT INTO articles2 (title, content, city) VALUES (%s, %s, %s)"
        # 批量插入会比循环单条更快,也可以用executemany
        cursor.executemany(sql, rows)
        # 必须提交事务!
        connection.commit()
        print(f"成功插入{cursor.rowcount}条数据")
    except Exception as e:
        # 出错就回滚,避免脏数据
        connection.rollback()
        print(f"插入失败,错误信息:{str(e)}")
    finally:
        # 别忘了关闭游标和连接
        cursor.close()
        connection.close()

# 读取CSV数据
with open('items.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    # 如果CSV有表头,就跳过第一行
    next(reader)
    rows = list(reader)

# 执行插入
insert_articles2(rows)

这个版本里用了executemany批量插入,效率更高,还加了异常处理和事务回滚,能帮你快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:05:27