Кросс-база данных объединяется в sqlalchemy
Есть ли способ в SQLAlchemy для объединения кросс-баз данных. Чтобы быть конкретным, вот мой прецедент:
Схема
- db1.entity1
- entity1_id: основной ключ
- entity2_id: внешний ключ к db2.entity2.entity2_id
- db2.entity2
- entity2_id: первичный ключ
Model
Я использую декларативный стиль для моделей.
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, которые не найдены. Я пробовал много разных комбинаций для __tablename__
без успеха. Поэтому мне было интересно, возможно ли это в SQLAlchemy.
Ответы
Ответ 1
Вам, вероятно, нужно передать параметр 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')