Je hebt twee opties. Je kunt de deelnamevoorwaarde doorgeven in join
zoals zo:
j = join(users, comments, onclause=users.c.id == commends.c.user_id)
Als je dit definieert in termen van een orm.relationship
eigenschap, is de sleutelwoordparameter primaryjoin
in plaats van onclause
.
De benadering die ik verkies is echter om gewoon te liegen . Informeer SQLAlchemy dat er een externe sleutel is, ook al is die er niet.
comments = Table('comments', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', Integer, ForeignKey('users.id')),
...
)
SQLAlchemy gaat verder alsof de refererende sleutel daadwerkelijk aanwezig is, ook al heeft de eigenlijke database dat niet. Natuurlijk kunt u in de problemen komen als de impliciete beperking van de buitenlandse sleutel wordt geschonden (comments.user_id
wanneer er geen corresponderende users.id
. is ), maar je zou hoe dan ook in de problemen komen.