不使用sqlalchemy如何将Pandas DataFrame导入MySQL数据库?
方案1:沿用现有依赖批量插入(无需额外安装库)
该方法完全适配你当前使用的flask_mysqldb连接逻辑,使用executemany实现批量插入,性能远高于逐行执行execute:
# 提取指定列,转换为(邮件, 姓名)格式的元组列表 data = df[['email', 'name']].values.tolist() # 批量执行插入操作 cursor.executemany('INSERT INTO accounts (email, name) VALUES (%s, %s)', data) mysql.connection.commit()
可选优化:如果
accounts表的INSERT IGNORE INTO accounts (email, name) VALUES (%s, %s),重复数据会自动跳过;需要更新重复数据的姓名则可以用ON DUPLICATE KEY UPDATE语法。
超大批量数据(10万行以上)可以按每批1万~5万行切分后分批提交,避免单次请求数据量过大触发数据库报错。
方案2:使用Pandasto_sql方法(代码更简洁)
如果可以引入SQLAlchemy依赖,该方法代码更精简,自动处理批量逻辑:
- 先安装依赖:
pip install sqlalchemy pymysql - 执行写入:
from sqlalchemy import create_engine # 按你实际的数据库配置替换连接串参数 engine = create_engine('mysql+pymysql://[数据库用户名]:[数据库密码]@[主机地址]/[数据库名]?charset=utf8mb4') # 追加写入accounts表,index=False表示不写入DataFrame的索引列 df[['email', 'name']].to_sql( name='accounts', con=engine, if_exists='append', index=False )
参数说明:
if_exists可选值为fail(表存在就报错终止)、replace(删除原表重建后写入)、append(追加到现有表末尾),插入已有表需选择append。
内容的提问来源于stack exchange,提问作者derikS4M1
相关产品推荐
相关产品推荐

