Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQLAlchemy und Joins, wir haben keine Fremdschlüssel

Sie haben zwei Möglichkeiten. Sie können die Join-Bedingung in join übergeben etwa so:

j = join(users, comments, onclause=users.c.id == commends.c.user_id)

Wenn Sie dies in Bezug auf eine orm.relationship definieren -Eigenschaft ist der Schlüsselwortparameter primaryjoin statt onclause .

Mein bevorzugter Ansatz ist jedoch, einfach zu lügen . Informieren Sie SQLAlchemy, dass ein Fremdschlüssel vorhanden ist, obwohl dies nicht der Fall ist.

comments = Table('comments', metadata,
    Column('id', Integer, primary_key=True),
    Column('user_id', Integer, ForeignKey('users.id')),
    ...
)

SQLAlchemy wird dann so vorgehen, als ob der Fremdschlüssel tatsächlich vorhanden wäre, obwohl die eigentliche Datenbank diesen nicht hat. Natürlich kann es zu Problemen kommen, wenn die implizierte Fremdschlüsselbeschränkung verletzt wird (comments.user_id wenn es keine entsprechende users.id gibt ), aber Sie würden wahrscheinlich sowieso in Schwierigkeiten geraten.