如何使用 pandas 和 PyMySQL 将 Excel 数据发送到 MySQL?

Posted

技术标签:

【中文标题】如何使用 pandas 和 PyMySQL 将 Excel 数据发送到 MySQL?【英文标题】:How to send Excel data to MySQL using pandas and PyMySQL? 【发布时间】:2021-09-14 09:26:16 【问题描述】:

我在使用 python 将数据直接从 excel 文件导入我的数据库中的表时遇到问题。

我有这个代码:

import os
import pandas as pd
import pymysql

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


# Abre conexion con la base de datos
db = pymysql.connect(
    host = os.environ.get("MY_DATABASE_HOST"),
    user = os.environ.get("MY_USERNAME"),
    password = os.environ.get("MY_PASSWORD"),
    database = os.environ.get("MY_DATABASE_NAME")
)
##################################################

################LECTURA DE EXCEL##################
tabla_azul = "./excelFiles/tablaAzul.xlsx"
dAzul = pd.read_excel(tabla_azul, sheet_name='Órdenes')
dAzul.to_sql(con=db, name='tablaazul', if_exists='append', schema='str')
#print(type(dAzul))

tabla_verde = "./excelFiles/tablaVerde.xlsx"
dVerde = pd.read_excel(tabla_verde, sheet_name='Órdenes')
dVerde.to_sql(con=db, name='tablaverde', if_exists='append', schema='str')
    我不确定必须将什么表名放入 name 变量中。 我需要使用 sqlalchemy yes 还是 yes? 如果问题 2 是肯定的:是否可以将sqlalchemypymysql 连接起来? 如果问题 3 是否定的:如何将 .env 变量(如 host)与 sqlalchemy 连接一起使用?

谢谢!

当我运行上面的代码时,它给了我这个错误:

pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': not all arguments converted during string formatting

【问题讨论】:

【参考方案1】:

如 pandas 文档中所述,对于 SQLite 以外的任何数据库 .to_sql() 都需要 SQLAlchemy Connectable 对象,该对象可以是 Engine 对象或 Connection 对象。您可以像这样为 PyMySQL 创建一个Engine 对象:

import sqlalchemy as sa

connection_url = sa.engine.URL.create(
    "mysql+pymysql",
    username=os.environ.get("MY_USERNAME"),
    password=os.environ.get("MY_PASSWORD"),
    host=os.environ.get("MY_DATABASE_HOST"),
    database=os.environ.get("MY_DATABASE_NAME")
)
engine = sa.create_engine(connection_url)

然后您可以调用.to_sql() 并将其传递给engine

dVerde.to_sql(con=engine, name='tablaverde', if_exists='append', schema='str')

【讨论】:

以上是关于如何使用 pandas 和 PyMySQL 将 Excel 数据发送到 MySQL?的主要内容,如果未能解决你的问题,请参考以下文章

Python使用pandas & pymysql读取MySQL数据到csv文件中

Python使用pandas & pymysql读取MySQL数据到csv文件中

利用pandas将mysql查询出得结果写入到excel文件

pymysql返回数据的处理

使用 to_sql 将 pandas df 写入 mysql 时抛出错误

python使用pandas将mysql数据表转为excel表格