Моделът, който се опитвате да приложите, е специален случай на връзка много към много. SQLAlchemy нарича това Adjacency List Relationship и препоръчвам да опитате да следвате кода там:
http://docs.sqlalchemy.org/en /rel_0_9/orm/relationships.html#adjacency-list-relationships
Ключът е 'remote_side' kwarg там.
Ето защо:грешката, която получавате, е защото вашата таблица за асоцииране („приятели“) има два външни ключа, сочещи към таблицата „потребители“:един в колона „user_id“ и един в колона „friend_id“. SQLAlchemy се опитва да открие автоматично връзки въз основа на външни ключове, но не успява, защото не може да каже в каква посока върви връзката. Така че, ако имате запис в таблицата 'приятели' като така
user_id : 1
friend_id : 2
SQLAlchemy не може да разбере дали user_1 има user_2 за приятел или обратното.
Ако това изглежда объркващо, така е. Приятелството в смисъла на социалните мрежи може да бъде необективно , в който случай user_1 има приятел user_2 не означава, че user_2 има user_1 като приятел; или може да бъде биективно , в който случай двете са еквивалентни. Тук показвам възрастта си, но първото е представено от Livejournal, докато второто е представено от Facebook.
Не знам от върха на главата си как да внедря неактивна връзка в SQLAlchemy. Това е грозен UNION ALL или нещо подобно в MySQL.