Det mønster, du forsøger at implementere, er et særligt tilfælde af mange-til-mange-forhold. SQLAlchemy kalder dette et Adjacency List Relationship, og jeg anbefaler, at du prøver at følge koden der:
http://docs.sqlalchemy.org/da /rel_0_9/orm/relationships.html#adjacency-list-relationships
Nøglen er 'remote_side' kwarg der.
Her er grunden:fejlen, du får, skyldes, at din tilknytningstabel ('venner') har to fremmednøgler, der peger på tabellen 'brugere':en på kolonne 'bruger_id' og en på kolonne 'ven_id'. SQLAlchemy forsøger at auto-detektere relationer baseret på fremmednøgler, men det mislykkes, fordi det ikke kan fortælle, hvilken retning relationen går. Så hvis du har en post i tabellen 'venner' som sådan
user_id : 1
friend_id : 2
SQLAlchemy kan ikke fortælle, om user_1 har user_2 som ven eller omvendt.
Hvis det virker forvirrende, er det det. Venskab i betydningen sociale netværk kan være unijektivt , i hvilket tilfælde bruger_1 har ven bruger_2 betyder ikke, at bruger_2 har bruger_1 som ven; eller det kan være bijektivt , i hvilket tilfælde de to er ækvivalente. Jeg viser min alder her, men førstnævnte er repræsenteret af Livejournal, mens sidstnævnte er repræsenteret af Facebook.
Jeg ved ikke helt, hvordan man implementerer et unijektivt forhold i SQLAlchemy. Det er en grim UNION ALL eller sådan noget i MySQL.