Mysql
 sql >> Database >  >> RDS >> Mysql

Come creare una relazione molti a molti in SQLAlchemy (python, flask) per l'utente del modello a se stesso

Il modello che stai cercando di implementare è un caso speciale di relazione molti-a-molti. SQLAlchemy la chiama una relazione elenco di adiacenza e consiglio di provare a seguire il codice lì:

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

La chiave è il kwarg 'remote_side' lì.

Ecco perché:l'errore che ricevi è perché la tua tabella di associazione ("amici") ha due chiavi esterne che puntano alla tabella "utenti":una sulla colonna "id_utente" e una sulla colonna "id_amico". SQLAlchemy tenta di rilevare automaticamente le relazioni basate su chiavi esterne, ma non riesce perché non può dire in quale direzione va la relazione. Quindi, se hai una voce nella tabella 'amici' in questo modo

user_id   : 1
friend_id : 2

SQLAlchemy non può dire se utente_1 ha utente_2 come amico o viceversa.

Se questo sembra confuso, lo è. L'amicizia nel senso dei social network può essere uniiettiva , nel qual caso l'utente_1 che ha un amico utente_2 non significa che l'utente_2 abbia utente_1 come amico; oppure può essere biiettivo , nel qual caso i due sono equivalenti. Mostro qui la mia età, ma il primo è rappresentato da Livejournal, mentre il secondo è rappresentato da Facebook.

Non so come implementare una relazione uniettiva in SQLAlchemy. È un brutto UNION ALL o qualcosa del genere in MySQL.