17 Stimmen

Datenbankübergreifende Verknüpfung in Sqlalchemy

Gibt es in SQLAlchemy eine Möglichkeit, datenbankübergreifende Joins durchzuführen. Um genau zu sein, hier ist mein Anwendungsfall:

Schema

  1. db1.Entität1
    1. Entität1_id: Primärschlüssel
    2. Entität2_id: Fremdschlüssel zu db2.entity2.entity2_id
  2. db2.Entität2
    1. Entität2_id: Primärschlüssel

Modell

Ich benutze deklarativer Stil für Modelle.

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)

Jetzt, wie erwartet, meine Abfragen für Entity1 ist mit MySQL-Fehlermeldungen sagen Tabelle entity2 nicht gefunden fehlgeschlagen. Ich habe viele verschiedene Kombinationen für __tablename__ ohne Erfolg. Also habe ich mich gefragt, ob es in SQLAlchemy möglich ist.

25voto

Wahrscheinlich müssen Sie die schema Parameter zu sqlalchemy.schema.Table . Wenn Sie die deklarative Basis für die ORM-Zuordnung verwenden, können Sie diesen zusätzlichen Parameter über die __table_args__ Eigenschaft auf Ihre Klassen.

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')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X