Mönstret du försöker implementera är ett specialfall av många-till-många-relationer. SQLAlchemy kallar detta en Adjacency List Relationship, och jag rekommenderar att du försöker följa koden där:
http://docs.sqlalchemy.org/en /rel_0_9/orm/relationships.html#adjacency-list-relationships
Nyckeln är 'remote_side' kwarg där.
Här är anledningen:felet du får beror på att din associationstabell ('vänner') har två främmande nycklar som pekar på tabellen 'användare':en i kolumnen 'användar-id' och en på kolumnen 'vän_id'. SQLAlchemy försöker automatiskt upptäcka relationer baserat på främmande nycklar, men det misslyckas eftersom det inte kan avgöra vilken riktning relationen går. Så om du har en post i tabellen "vänner" som så
user_id : 1
friend_id : 2
SQLAlchemy kan inte avgöra om user_1 har user_2 som vän eller vice versa.
Om det verkar förvirrande så är det det. Vänskap i betydelsen sociala nätverk kan vara unijektiv , i vilket fall user_1 har vän user_2 betyder inte att user_2 har user_1 som vän; eller så kan den vara bijektiv , i vilket fall de två är likvärdiga. Jag visar min ålder här, men den förra representeras av Livejournal, medan den senare representeras av Facebook.
Jag vet inte hur man implementerar en unijektiv relation i SQLAlchemy. Det är en ful UNION ALL eller något liknande i MySQL.