Nehmen Sie Folgendes in MySQL an:
%Vor%Beachten Sie, dass den Tabellen keine formalen Fremdschlüsseleinschränkungen hinzugefügt werden. Dies ist etwas, das ich geerbt habe und das sich in unserem aktuellen Setup nicht ändern kann. (Wir überholen das ganze System, aber in der Zwischenzeit muss ich mit dem arbeiten, was mir gegeben wurde)
Ich habe Probleme, meinen Kopf um SQLalchemys Joins zu wickeln, wenn zwischen den Tabellen kein formeller Fremdschlüssel existiert.
Effektiv möchte ich etwas tun wie:
%Vor%Code Ich habe Dinge wie die folgenden:
%Vor%... was natürlich scheitert mit:
%Vor%Ich bin mir nicht sicher, wie ich das umgehen soll, wenn wir keine Fremdschlüssel haben. Wie anders definiere ich die Beziehung? Ich dachte, es war Teil des Mapper () Aufrufs:
%Vor%... aber anscheinend habe ich die Dokumentation falsch gelesen.
Vielen Dank im Voraus für jede Hilfe.
Sie haben zwei Möglichkeiten. Sie können die Join-Bedingung in join
wie folgt übergeben:
Wenn Sie dies als orm.relationship
-Eigenschaft definieren, lautet der Keyword-Parameter primaryjoin
anstelle von onclause
.
Der Ansatz, den ich bevorzuge, ist jedoch nur Lüge . Informieren Sie SQLAlchemy, dass ein Fremdschlüssel vorhanden ist, obwohl dies nicht der Fall ist.
%Vor% SQLAlchemy wird so verfahren, als ob der Fremdschlüssel tatsächlich vorhanden wäre, obwohl die eigentliche Datenbank das nicht hat. Natürlich kann es zu Problemen kommen, wenn die implizite Foreign-Key-Einschränkung verletzt wird ( comments.user_id
, wenn es keine entsprechende users.id
gibt), aber Sie würden wahrscheinlich sowieso in Schwierigkeiten geraten.
Tags und Links python mysql sqlalchemy join foreign-keys