如何在SQLAlchemy中连接来自不同数据库的2个表?

时间:2019-02-15 18:36:29

标签: python sqlalchemy

我正在使用python / SQLAlchemy从MySQL数据库提取数据。我有2个不同的主机,每个主机都有一个数据库,我需要连接2个表(每个主机/数据库中有一个)。我该怎么办?

我正在阅读this documentation,但无法获得直接帮助。连接到一个数据库很简单:

engine = create_engine('mysql+pymysql://user:pass@host/database')

但是我不确定如何使用两个引擎。

有人吗?预先感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用Pandas作为两个数据库之间的粘合剂。例如,

import config
import pandas as pd
import sqlalchemy as SA

engine_postgresql = SA.create_engine('postgresql+psycopg2://{u}:{p}@{h}/{d}'.format(
    u=PGUSER, p=PGPASS, h=PGHOST, d='pgtest'))
engine_mysql = SA.create_engine('mysql+mysqldb://{u}:{p}@{h}/{d}'.format(
    u=MYUSER, p=MYPASS, h=MYHOST, d='mytest'))

sql = 'SELECT col1, col2, col3 FROM tableA'
df1 = pd.read_sql(sql, con=engine_postgresql)
sql = 'SELECT col1, col2, col4 FROM tableB'
df2 = pd.read_sql(sql2, con=engine_mysql)

result = pd.merge(df1, df2, how='left', on=['col1', 'col2'])

pd.read_sql将SQL查询传递到数据库并返回一个DataFrame。 pd.merge加入两个DataFrame并返回一个DataFrame。

DataFrame也可以使用to_sql method作为表插入数据库中。例如,

result.to_sql('tablename', engine_postgresql, if_exists='append')