使用sqlalchemy包将pandas的DataFrame数据写入MySQL数据库

本文介绍了使用Python的SQLAlchemy库连接MySQL数据库的两种方法,并演示了如何将DataFrame数据写入MySQL表中。提供了使用pymysql和mysqldb驱动的具体示例。

from sqlalchemy import create_engine

sqlalchemy链接mysql有多个办法
选择 1
engine = create_engine('mysql+pymysql://用户名:密码@127.0.0.1:端口号3306/数据库名?charset=utf8')
或者选择2 

engine = create_engine('mysql+mysqldb://用户名:密码@127.0.0.1:端口号3306/数据库名?charset=utf8')

df.to_sql(目标表名,con=engine, schema=数据库名, index=False, index_label=False, if_exists='append', chunksize=1000)


favor = ‘mysql’  会报不建议,丢提示用,所以建议去掉这个入参


使用 `pandas` 的 `DataFrame` 写入 MySQL 数据库时,如果希望根据某一列判断是否重复,并执行“存在则更新,不存在则插入”的操作(即实现 **UPSERT**),可以结合 `pandas` 和 SQLAlchemy数据库操作来完成。 ### ✅ 解决方案: 1. 使用 `pandas.DataFrame.to_sql()` 将数据写入数据库临时表。 2. 使用原生 SQL 的 `INSERT INTO ... ON DUPLICATE KEY UPDATE` 语句将临时表数据合并到目标表。 3. 确保用于判断重复的列在目标表中设置了 **主键或唯一约束**。 ### ✅ 示例代码: ```python import pandas as pd from sqlalchemy import create_engine # 创建数据库连接(请替换为你的实际数据库信息) engine = create_engine('mysql+pymysql://username:password@host:port/database') # 示例 DataFrame df = pd.DataFrame({ 'id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'] }) # 将 DataFrame 写入临时表 df.to_sql(name='temp_table', con=engine, if_exists='replace', index=False) # 使用 SQL 实现 UPSERT 操作 with engine.connect() as conn: conn.execute(""" INSERT INTO your_table (id, name) SELECT id, name FROM temp_table ON DUPLICATE KEY UPDATE name = VALUES(name) """) conn.execute("DROP TABLE temp_table") # 删除临时表 ``` ### 🔍 说明: - `your_table` 是目标表名。 - `id` 是用于判断是否重复的列,必须是主键或唯一索引。 - `ON DUPLICATE KEY UPDATE name = VALUES(name)` 表示当 `id` 冲突时更新 `name` 字段。 - `VALUES(name)` 表示插入时传入的值。 --- ### ✅ 注意事项: - 确保目标表 `your_table` 中用于判断重复的列(如 `id`)已设置为主键或唯一索引。 - 如果需要更新多个字段,可以扩展 `ON DUPLICATE KEY UPDATE` 后的字段列表。 - 如果数据量较大,建议添加事务控制或分批处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pafei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值