Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak stworzyć relację wiele do wielu w SQLAlchemy (python, flask) dla modelu użytkownika do siebie?

Wzorzec, który próbujesz zaimplementować, to szczególny przypadek relacji wiele-do-wielu. SQLAlchemy nazywa to relacją listy sąsiedztwa i zalecam spróbowanie prześledzenia zawartego tam kodu:

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

Kluczem jest tam kreg 'remote_side'.

Oto dlaczego:błąd, który otrzymujesz, jest spowodowany tym, że tabela asocjacyjna ('friends') ma dwa klucze obce wskazujące na tabelę 'users':jeden w kolumnie 'user_id' i jeden w kolumnie 'friend_id'. SQLAlchemy próbuje automatycznie wykryć relacje na podstawie kluczy obcych, ale kończy się to niepowodzeniem, ponieważ nie może stwierdzić, w którym kierunku zmierza relacja. Więc jeśli masz wpis w tabeli „przyjaciele” jak tak

user_id   : 1
friend_id : 2

SQLAlchemy nie może stwierdzić, czy użytkownik_1 ma user_2 jako przyjaciela, czy odwrotnie.

Jeśli to wydaje się mylące, to tak. Przyjaźń w sensie sieci społecznościowych może być jednoznaczna , w takim przypadku user_1 posiadanie przyjaciela user_2 nie oznacza, że ​​user_2 ma user_1 jako przyjaciela; lub może być bijective , w takim przypadku oba są równoważne. Pokazuję tutaj swój wiek, ale pierwszy jest reprezentowany przez Livejournal, a drugi przez Facebooka.

Nie wiem, jak zaimplementować relację unijective w SQLAlchemy. To brzydkie UNION ALL lub coś takiego w MySQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysqldumper:Zrzucanie każdego stołu osobno

  2. MySQL:dynamicznie dodawaj kolumny do wyników zapytania

  3. Wykryj, czy wartość jest liczbą w MySQL

  4. Tworzenie GeoJsona w php z MySql do użycia z MapBox javascript API

  5. Jak usunąć jednocześnie szereg rekordów w MySQL?