如何使用 pandas 和 PyMySQL 将 Excel 数据发送到 MySQL?
How to send Excel data to MySQL using pandas and PyMySQL?
我在直接从 excel 文件将带有 python 的数据导入数据库中的 table 时遇到问题。
我有这个代码:
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 变量中输入什么 table 名称。
- 我需要使用 sqlalchemy 是还是是?
- 如果问题 2 是:是否可以将
sqlalchemy
与 pymysql
连接起来?
- 如果问题 3 是否定的:我如何使用像
host
这样的 .env 变量与 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
如 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')
我在直接从 excel 文件将带有 python 的数据导入数据库中的 table 时遇到问题。
我有这个代码:
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 变量中输入什么 table 名称。
- 我需要使用 sqlalchemy 是还是是?
- 如果问题 2 是:是否可以将
sqlalchemy
与pymysql
连接起来? - 如果问题 3 是否定的:我如何使用像
host
这样的 .env 变量与 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
如 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')