sql >> Databáze >  >> RDS >> Mysql

Jak vytvořit vztah many to many v SQLAlchemy (python, flask) pro model User k sobě samému

Vzor, který se snažíte implementovat, je zvláštní případ vztahu mnoho k mnoha. SQLAlchemy tomu říká Adjacency List Relationship a já doporučuji zkusit procházet kódem:

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

Klíčem je tam kwarg 'remote_side'.

Zde je důvod:chyba, kterou dostáváte, je, že vaše asociační tabulka ('friends') má dva cizí klíče ukazující na tabulku 'users':jeden ve sloupci 'user_id' a jeden ve sloupci 'friend_id'. SQLAlchemy se pokouší automaticky detekovat vztahy na základě cizích klíčů, ale selže, protože nedokáže určit, kterým směrem se vztah ubírá. Takže pokud máte záznam v tabulce 'přátelé', tak

user_id   : 1
friend_id : 2

SQLAlchemy nedokáže říct, zda má uživatel user_1 za přítele uživatele 2 nebo naopak.

Pokud se to zdá matoucí, je to tak. Přátelství ve smyslu sociálních sítí může být unijektivní , v takovém případě uživatel_1, který má přítele uživatel_2, neznamená, že uživatel_2 má uživatele_1 jako přítele; nebo může být bijektivní , v takovém případě jsou oba ekvivalentní. Zde ukazuji svůj věk, ale první zastupuje Livejournal, zatímco druhý zastupuje Facebook.

Nevím z hlavy, jak implementovat jednotný vztah v SQLAlchemy. Je to ošklivý UNION ALL nebo něco podobného v MySQL.



  1. Vyberte data z tabulek zobrazení MySQL dotaz

  2. Jak monitorovat PostgreSQL běžící uvnitř kontejneru Docker:Část první

  3. SQL získat data z BEGIN; ...; KONEC; blok v pythonu

  4. volání uloženého procesu přes dblink