我正在使用两个MySQL数据库。我想在SQLAlchemy中将DB 1中的一个表与DB2中的表连接起来。在
我正在使用automap_base,同时在sqlalchemy中创建数据访问层,如下所示。。。在
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_)
我的桌子课就像
^{pr2}$我是这样做的
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中,可以跨两个数据库表进行连接吗? 如何做到这一点?在
在MySQL中databases are synonymous with schemas。例如,在Postgresql中,您可以在一个数据库中的多个模式之间进行查询,但不能在数据库之间(直接地)进行查询,因此可以在MySQL中查询多个数据库,因为两者之间没有区别。在
因此,在MySQL中解决多数据库查询的一个可能的解决方案是使用一个引擎、会话和基来处理模式,并将^{} keyword argument 传递给表,或者反映这两个模式,以便它们完全限定。在
由于没有您的数据,我在一个名为sopython和sopython2的测试服务器上创建了2个模式(MySQL数据库):
并在每个表中添加了一个表:
^{pr2}$在Python中:
在不指定默认情况下使用的架构(数据库)的情况下创建引擎:
这个警告是我不完全理解的,可能是由于两个表之间的外键引用导致foo重新反射的结果,但它似乎没有引起麻烦。在
该警告是第二次调用
prepare()
重新创建和替换第一次调用中反映的表的类的结果。避免这一切的方法是首先使用元数据从两个模式中反映表,然后准备:在所有这些之后,您可以查询连接foo和bar:
相关问题 更多 >
编程相关推荐