pd.tosql不能将csv文件导入mysql?

本文介绍如何使用pandas与sqlalchemy将CSV文件数据导入MySQL数据库,包括数据库连接配置、数据读取及导入操作。文章解决常见问题如数据库连接驱动选择、表字段匹配、SQL语句错误等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pd.to_sql仅支持sqlite3与sqlalchemy,所以pymysql直接建立的数据库连接对象无法作为to_sql的连接参数

改动如下:

利用sqlalchemy建立数据库连接
导入方法换成pd.io.to_sql()

将csv文件导入mysql实例:

# 导包
import pymysql	# mysql驱动
import pandas as pd
from sqlalchemy import create_engine	# pandas支持的驱动方式

# 读取csv文件内容
notes = pd.read_csv('/Users/wjl/Desktop/xc_notes.csv',encoding='utf8')

# create_engine 创建数据库连接conn
conn = create_engine('mysql+pymysql://root:278***972@localhost:3306/qn_yj?charset=utf8')

# 导入	pd.io.to_sql( DataFrame, table_name, con=db_connect, if_exists='append/fail/replace', index=False)
pd.io.sql.to_sql(notes,'lvyou_note',con=conn,if_exists='append',index=False)

踩坑:

1 提前建好数据库和表

并不是必要,to_sql 会自动生成,但推荐建好,可控性

2 在csv文件首行,添加与表字段相同的内容,一一对应
3 网上很多代码在建立数据库连接的时候,驱动写的是mysqldb,本机不可用,换pymysql正常
4 if_exists参数为append
5 index参数为False,源码默认为True,sql语句会在表中加一列,然而列名都已指定,所以会报错,换False正常

### 使用 Python PandasSQLAlchemy 将 CSV 文件数据导入 MySQL 数据库 为了完成此操作,需先确保已安装必要的 Python 库 `pandas`、`sqlalchemy` 及 `mysql-connector-python` 或者 `PyMySQL`。可以通过 pip 安装这些包: ```bash pip install pandas sqlalchemy mysql-connector-python pymysql ``` #### 创建连接引擎并定义目标数据库配置 建立与 MySQL 的连接通常涉及创建一个 SQL Alchemy 引擎实例来管理底层的数据库会话。下面是一个例子展示如何设置这个过程[^1]。 对于具体的连接字符串构建方式如下所示: ```python from sqlalchemy import create_engine # 替换 {user}, {password}, {host} 和 {database_name} engine = create_engine( 'mysql+pymysql://{user}:{password}@{host}/{database_name}?charset=utf8mb4', pool_recycle=3600, echo=True # 开启调试模式查看执行语句 ) ``` 这里使用了 `mysql+pymysql://` 协议指定采用 PyMySQL 驱动程序;如果选择了其他驱动,则应相应调整协议部分。同时,在 URL 中指定了字符集为 utf8mb4 来支持更广泛的 Unicode 字符编码[^2]。 #### 加载 CSV 文件到 DataFrame 对象 利用 Pandas 提供的功能可以轻松加载本地或远程存储中的 CSV 文件成为内存里的表格结构——DataFrame: ```python import pandas as pd df = pd.read_csv('path/to/your/file.csv') print(df.head()) # 查看前几行确认读取成功 ``` 这段代码片段展示了怎样从给定路径加载 CSV 文件,并打印出前五行作为验证手段[^3]。 #### 插入 DataFrame 到 MySQL 表格中 最后一步就是把已经准备好的 DataFrame 写回到之前设定的目标表里去。这可通过调用 `.to_sql()` 方法实现,它允许自定义一些参数比如覆盖现有表还是追加记录等行为: ```python table_name = "my_table" with engine.connect() as conn: df.to_sql(name=table_name, con=conn, if_exists='replace', index=False) print(f"Data has been written to table '{table_name}' successfully.") ``` 上述代码段说明了当选择 `'replace'` 参数时将会删除旧有同名表再重建新表;而 `index=False` 是为了避免将索引列也一同写入数据库[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值