SQLAlchemy und Joins, wir haben keine Fremdschlüssel

8

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.

    
iandouglas 15.06.2011, 01:51
quelle

1 Antwort

25

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

%Vor%

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.

    
SingleNegationElimination 15.06.2011, 02:53
quelle