You need to enable JavaScript to run this app. 如何使用pandas和PyMySQL将Excel数据导入MySQL及相关问题解答
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pandas和PyMySQL将Excel数据导入MySQL及相关问题解答

问题解答

报错根因:你当前报错是因为pandas的to_sql方法对非SQLite数据库,仅支持接收SQLAlchemy引擎对象作为连接参数,你直接传入pymysql原生连接时,pandas会默认将其识别为SQLite连接,执行了SQLite特有的系统表查询逻辑,因此抛出上述错误。


疑问解答

  • to_sql的name参数
    就是你MySQL数据库中提前建好的目标表名,你需要确保该表的字段名、字段类型和你读入Excel得到的DataFrame列完全对应,if_exists='append'配置会直接把DataFrame数据追加到这个表中。注意如果你的MySQL开启了表名大小写敏感,要严格对应库中的表名大小写。
  • 是否必须使用SQLAlchemy?
    是,pandas 1.3及以上版本对接MySQL、PostgreSQL等关系型数据库时,to_sql不再支持原生数据库连接作为入参,必须使用SQLAlchemy引擎。
  • SQLAlchemy是否可以和pymysql搭配使用?
    完全可以,pymysql就是SQLAlchemy对接MySQL时最常用的底层驱动,两者兼容没有问题。
  • 使用SQLAlchemy建立连接时如何调用.env环境变量?
    你只需要把从os.environ读取的参数拼接到SQLAlchemy的数据库连接字符串中即可,无需额外适配。

修改后的可运行代码

先安装依赖:pip install sqlalchemy

import os
import pandas as pd
import pymysql
from sqlalchemy import create_engine

if os.path.exists("env.py"):
    import env

# 拼接SQLAlchemy连接字符串
conn_str = f"mysql+pymysql://{os.environ.get('MY_USERNAME')}:{os.environ.get('MY_PASSWORD')}@{os.environ.get('MY_DATABASE_HOST')}/{os.environ.get('MY_DATABASE_NAME')}"
engine = create_engine(conn_str)

# 读取Excel导入数据库
tabla_azul = "./excelFiles/tablaAzul.xlsx"
dAzul = pd.read_excel(tabla_azul, sheet_name='Órdenes')
# index=False避免把DataFrame索引列当成字段插入表中,不需要可以去掉
dAzul.to_sql(con=engine, name='tablaazul', if_exists='append', index=False)

tabla_verde = "./excelFiles/tablaVerde.xlsx"
dVerde = pd.read_excel(tabla_verde, sheet_name='Órdenes')
dVerde.to_sql(con=engine, name='tablaverde', if_exists='append', index=False)

# 关闭连接引擎
engine.dispose()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 00:15:03