pymysql和sqlalchemy之间的关系

Mic*_* Li 7 mysql io sqlalchemy pandas pymysql

我用过很多 python pandas 和 MySQL。但以分开的方式。为了实现更好的自动化任务,我开始了解pymysql。

对我来说,我发现一些数据库操作只能通过 pymysql+pandas 操作来实现。然而,一些数据库操作,我必须使用sqlachemy来创建引擎。这让我很困惑。那里的 sqlalechmy 引擎是什么以及引擎和连接之间的区别/关系

基于官方文档pymysql:这个包包含一个纯Python MySQL客户端库。

据我了解,基本上,它是连接 python 和 mysql 的驱动程序。由于pandas有read_sql方法方法,

所以我应该通过结合这两者来实现所有数据库操作。

例如,基于以下

etl_conn = pymysql.connect(host = host, user = user,password = passwd,db = db_health_plan)
query = 'select * from HEALTH_PLAN.WD_PNL_MONTHLY'
pd.read_sql(query, etl_conn, index_col = 'index')
Run Code Online (Sandbox Code Playgroud)

我可以使用 pandas.io 和 pymysql 创建一个表

from pandas.io import sql
create_table_query ='CREATE TABLE WD_PNL_MONTHLY_05052020 AS SELECT * FROM 
HEALTH_PLAN.WD_PNL_MONTHLY';
sql.execute(create_table_query, etl_conn)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将行插入表时失败了。

total.to_sql('WD_PNL_MONTHLY', etl_conn,
schema= 'HEALTH_PLAN', if_exists='append', 
index=True, index_label=None, chunksize=None, dtype=None)
Run Code Online (Sandbox Code Playgroud)

为了完成任务,我必须创建引擎链接 sqlalchemy 和 pymysql

db_connection_str = 'mysql+pymysql://****'
from sqlalchemy import create_engine
sql_engine = create_engine(db_connection_str)
Run Code Online (Sandbox Code Playgroud)

然后下面的就可以了

total.to_sql('WD_PNL_MONTHLY', sql_engine,
schema= 'HEALTH_PLAN', if_exists='append', 
index=True, index_label=None, chunksize=None, dtype=None)
Run Code Online (Sandbox Code Playgroud)