Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment créer une relation plusieurs à plusieurs dans SQLAlchemy (python, flacon) pour le modèle User à lui-même

Le modèle que vous essayez d'implémenter est un cas particulier de relation plusieurs-à-plusieurs. SQLAlchemy appelle cela une relation de liste de contiguïté, et je recommande d'essayer de suivre le code :

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

La clé est le kwarg 'remote_side' ici.

Voici pourquoi :l'erreur que vous obtenez est due au fait que votre table d'association (« amis ») a deux clés étrangères pointant vers la table « utilisateurs » :une sur la colonne « user_id » et une sur la colonne « friend_id ». SQLAlchemy essaie de détecter automatiquement les relations basées sur des clés étrangères, mais il échoue car il ne peut pas dire dans quelle direction va la relation. Donc, si vous avez une entrée dans le tableau 'amis' comme ceci

user_id   : 1
friend_id : 2

SQLAlchemy ne peut pas dire si l'utilisateur_1 a l'utilisateur_2 comme ami, ou vice-versa.

Si cela semble déroutant, ça l'est. L'amitié au sens des réseaux sociaux peut être unijective , auquel cas user_1 ayant comme ami user_2 ne signifie pas que user_2 a user_1 comme ami ; ou il peut être bijectif , auquel cas les deux sont équivalents. Je montre mon âge ici, mais le premier est représenté par Livejournal, tandis que le second est représenté par Facebook.

Je ne sais pas du haut de ma tête comment implémenter une relation unijective dans SQLAlchemy. C'est un vilain UNION ALL ou quelque chose comme ça dans MySQL.