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

如何将URL返回的CSV响应转换为DataFrame并写入SQL表

问题

我有一项需求:从网站下载CSV格式的数据并写入SQL表。目前已使用以下Python代码实现登录获取token,并获取到了CSV格式的响应内容:

import urllib
from bs4 import BeautifulSoup

url = "https://abcdef.oz/login"
response = opener.open(url)
if response.status == 200:
    #webUrl = urllib.request.urlopen(url)
    #print("Result code: " + str(webUrl.getcode()))
    data = response.read().decode("utf-8")
    soup = BeautifulSoup(data)

    #Got a token
    token = soup.find_all("meta", {"name":"token"}, limit=1)[0]['content']
    print("token",token)
    sdata = {"email": "abc@def.com", "password": "password"}

    data = urllib.parse.urlencode(sdata).encode()

    print("data",data)
    url = "https://abcdef.oz.co/reports"

    response = opener.open(url)
    r = response.read().decode('utf-8')

    print(r)
 else:
    print("No Response")

响应内容示例如下:

"Col1","Col2","Col3"
"abc","def","efg"
"hij","klm","mno"

请问如何将该响应转换为可跳过表头、能写入SQL表的格式(如DataFrame)?

解决方案

1. 将CSV响应转为DataFrame

使用pandas结合StringIO处理字符串格式的CSV,直接跳过表头行:

首先导入所需库:

import pandas as pd
from io import StringIO

然后处理响应内容r:

# 把CSV字符串包装成文件流对象
csv_stream = StringIO(r)
# 跳过第一行表头,读取数据到DataFrame,可自定义列名
df = pd.read_csv(csv_stream, skiprows=1, names=["col1", "col2", "col3"])

如果需要保留原表头作为DataFrame的列名(仅写入SQL时忽略表头逻辑),直接读取即可:

df = pd.read_csv(StringIO(r))

2. 写入SQL表

借助pandas的to_sql方法结合sqlalchemy实现数据写入,步骤如下:

首先导入并创建数据库连接(以MySQL为例,其他数据库连接格式类似):

from sqlalchemy import create_engine

# 连接格式:数据库类型+驱动://用户名:密码@主机地址:端口/数据库名
engine = create_engine('mysql+pymysql://your_username:your_password@localhost:3306/your_database')

然后将DataFrame写入SQL表:

# if_exists参数可选'replace'(替换表)、'append'(追加数据)、'fail'(表存在则报错)
df.to_sql('target_table', engine, if_exists='append', index=False)

注意:确保DataFrame的列名与目标SQL表的列名对应,若列名不匹配,可通过columns参数指定映射关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:35:15