如何使用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
相关产品推荐
相关产品推荐

