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

从URL获取CSV存储到MySQL仅加载首行问题解决求助

问题根因
  • CSV读取和数据库插入逻辑完全分离:遍历CSV时仅打印了行内容,没有将行存储下来供后续插入使用,遍历结束后仅执行了1次插入操作,只会写入单次获取到的行数据
  • SQL语句占位符使用错误:mysql.connector的参数占位符%s不需要额外包裹双引号,引号会被识别为值的一部分,引发数据异常或插入错误
  • 资源释放逻辑不严谨:出现异常时可能会遗留未关闭的数据库连接和游标,造成资源泄漏
修正后代码
import requests        
from contextlib import closing              
import csv     
import mysql.connector as mysql    
from mysql.connector import Error   

# CSV地址
url = "https://www.raidbots.com/reports/n671gAXSsFLwzz7uvB7JYs/data.csv"
# 存储所有CSV行数据
all_rows = []
with closing(requests.get(url, stream=True)) as r:   
    f = (line.decode('utf-8') for line in r.iter_lines())   
    empdata = csv.reader(f, delimiter=',', quotechar='"')
    # 跳过表头(如果不需要跳过可删除下一行)
    next(empdata)
    for row in empdata:
        # 只保留前6列,和表结构对应,避免列数不匹配报错
        all_rows.append(row[:6])
        print(row)   

conn = None
cursor = None
try:     
    conn = mysql.connect(
        user='替换为你的用户名',
        password='替换为你的密码',
        host='替换为你的数据库地址',
        database='替换为你的库名'
    )   
    if conn.is_connected():   
        cursor = conn.cursor()   
        cursor.execute("select database();")   
        record = cursor.fetchone()   
        print("已连接到数据库: ", record)
        cursor.execute('DROP TABLE IF EXISTS data_scraper_table;')
        print('正在创建表....')
        cursor.execute("CREATE TABLE data_scraper_table(col1 varchar(255),col2 varchar(255),col3 varchar(255),col4 varchar(255),col5 varchar(255),col6 varchar(255))")
        print("表创建完成....")
        # 批量插入所有数据,效率远高于逐行插入
        insert_sql = "INSERT INTO data_scraper_table(col1,col2,col3,col4,col5,col6) VALUES(%s, %s, %s, %s, %s, %s)"
        cursor.executemany(insert_sql, all_rows)
        conn.commit()
        print(f"成功插入{cursor.rowcount}条数据")
except Error as e:
    print("MySQL操作出错: ", e)
    if conn:
        conn.rollback()
finally:
    # 无论是否报错都释放资源
    if cursor:
        cursor.close()
    if conn and conn.is_connected():
        conn.close()
额外说明
  • 如果需要将CSV表头也作为数据入库,删除next(empdata)这一行即可
  • 若CSV列数有变化,需要同步修改建表语句的字段数量,以及插入语句的占位符数量,保证和列数匹配
  • 数据量超过10万条时建议分批次插入,避免内存占用过高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:24:01