【发布时间】:2017-06-15 09:51:34
【问题描述】:
我正在使用两个 MySQL 数据库。我想在 SQLAlchemy 中将来自 DB 1 的表与来自 DB2 的表连接起来。
我在 sqlalchemy 中创建数据访问层时使用 automap_base 如下...
class DBHandleBase(object):
def __init__(self, connection_string='mysql+pymysql://root:xxxxxxx@localhost/services', pool_recycle=3600):
self.Base_ = automap_base()
self.engine_ = create_engine(connection_string,
pool_recycle = pool_recycle)
self.Base_.prepare(self.engine_, reflect=True)
self.session_ = Session(self.engine_)
我的表类就像
class T1D1_Repo():
def __init__(self, dbHandle):
# create a cursor
self.Table_ = dbHandle.Base_.classes.t1
self.session_ = dbHandle.session_
我正在像这样进行连接,
db1_handle = DB1_Handle()
db2_handle = DB2_Handle()
t1d1_repo = T1D1_Repo(handle)
t1d2_repo = T1D2_Repo(person_handle)
result = t1d1_repo.session_.query(
t1d1_repo.Table_,
t1d2_repo.Table_).join(t1d2_repo.Table_, (
t1d1_repo.Table_.person_id
== t1d2_repo.Table_.uuid))
我收到这样的错误:
sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, "Table 'db1.t1d2' doesn't exist") [SQL: 'SELECT
我们在数据库 db1 中创建了表 t1,在数据库 db2 中创建了表 t2。
在 sqlalchemy ORM 中是否可以跨两个数据库表进行连接? 如何实现?
【问题讨论】:
-
这是不可能的(ish)。例如,您不能针对 db1 触发 SQL 查询并期望它能够查询 db2 中的表。您必须分别查询这些表并在 Python 中“加入”结果。现在,如果您使用支持外部表的数据库,您可以将您的数据库链接在一起,并将另一个数据库中的表作为外部表引入。但我不知道 MySQL 是否支持。
-
相关:stackoverflow.com/questions/1565993/… 和 stackoverflow.com/questions/9416871/…。之前评论中的“不可能”是一个有点强硬的说法。 MySQL 将允许您在数据库之间进行查询,如果它们驻留在同一台服务器上,那么就会有 FEDERATED 存储引擎。
-
您的数据库是否在同一台服务器上?
-
是的,两个数据库都在同一台服务器上
标签: python mysql join sqlalchemy multiple-databases