问题描述
|
sqlAlchemy中是否有一种方法可以进行跨数据库联接。具体来说,这是我的用例:
架构图
db1.entity1
entity1_id:主键
entity2_id:db2.entity2.entity2_id的外键
db2.entity2
entity2_id:主键
模型
我正在为模型使用声明式样式。
class Entity1(Base):
__tablename__ = \'entity1\' ## I tried combination of <db>.<table> with no success
entity1_id = Column(Integer,primary_key=True)
entity2_id = Column(Integer,ForeignKey(\'db2.entity2.entity2_id\'))
entity2 = relationship(\'Entity2\')
class Entity2(Base):
__tablename__ = \'entity2\' ## I tried combination of <db>.<table> with no success
entity2_id = Column(Integer,primary_key=True)
现在,正如预期的那样,我对Entity1的查询失败,并显示MysqL错误消息,提示未找到表Entity2。我为ѭ1尝试了许多不同的组合,但均未成功。所以我想知道在sqlAlchemy中是否可能。
解决方法
您可能需要将
schema
参数传递给sqlalchemy.schema.Table
。当使用声明式基进行ORM映射时,可以通过类的__table_args__
属性提供此额外参数。
class Entity2(Base):
__tablename__ = \'entity2\' ## I tried combination of <db>.<table> with no success
__table_args__ = {\'schema\': \'db2\'}
entity2_id = Column(Integer,primary_key=True)
class Entity1(Base):
__tablename__ = \'entity1\' ## I tried combination of <db>.<table> with no success
__table_args__ = {\'schema\': \'db1\'}
entity1_id = Column(Integer,primary_key=True)
entity2_id = Column(Integer,ForeignKey(Entity2.entity2_id))
entity2 = relationship(\'Entity2\')