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

So erstellen Sie eine Beziehung von vielen zu vielen in SQLAlchemy (Python, Flask) für das Modell User zu sich selbst

Das Muster, das Sie zu implementieren versuchen, ist ein Sonderfall einer Viele-zu-Viele-Beziehung. SQLAlchemy nennt dies eine Adjacency List Relationship, und ich empfehle, zu versuchen, den Code dort durchzugehen:

http://docs.sqlalchemy.org/en /rel_0_9/orm/relationships.html#adjacency-list-relationships

Der Schlüssel ist dort das Kwarg 'remote_side'.

Hier ist der Grund:Der Fehler, den Sie erhalten, liegt daran, dass Ihre Assoziationstabelle ('friends') zwei Fremdschlüssel hat, die auf die Tabelle 'users' zeigen:einen auf die Spalte 'user_id' und einen auf die Spalte 'friend_id'. SQLAlchemy versucht, Beziehungen basierend auf Fremdschlüsseln automatisch zu erkennen, schlägt jedoch fehl, weil es nicht erkennen kann, in welche Richtung die Beziehung geht. Wenn Sie also einen Eintrag in der Tabelle "Freunde" haben, so

user_id   : 1
friend_id : 2

SQLAlchemy kann nicht erkennen, ob Benutzer_1 Benutzer_2 als Freund hat oder umgekehrt.

Wenn das verwirrend erscheint, ist es das. Freundschaft im Sinne sozialer Netzwerke kann unijektiv sein , in diesem Fall bedeutet Benutzer_1, dass Benutzer_2 befreundet ist, nicht, dass Benutzer_2 Benutzer_1 als Freund hat; oder es kann bijektiv sein , in diesem Fall sind die beiden äquivalent. Ich zeige hier mein Alter, aber ersteres wird von Livejournal repräsentiert, während letzteres von Facebook repräsentiert wird.

Ich weiß nicht aus dem Kopf, wie man eine unijektive Beziehung in SQLAlchemy implementiert. Es ist ein hässliches UNION ALL oder so etwas in MySQL.