実装しようとしているパターンは、多対多の関係の特殊なケースです。 SQLAlchemyはこれを隣接リスト関係と呼んでいます。そこでコードを実行することをお勧めします:
http://docs.sqlalchemy.org/en /rel_0_9/orm/relationships.html#adjacency-list-relationships
重要なのは、そこにある「remote_side」kwargです。
理由は次のとおりです。関連付けテーブル(「friends」)に、テーブル「users」を指す2つの外部キーがあります。1つは列「user_id」に、もう1つは列「friend_id」にあります。 SQLAlchemyは外部キーに基づいて関係を自動検出しようとしますが、関係がどちらの方向に進むかがわからないため失敗します。したがって、テーブル「友達」にそのようなエントリがある場合
user_id : 1
friend_id : 2
SQLAlchemyは、user_1がuser_2を友達として持っているか、またはその逆かを判断できません。
それが紛らわしいと思われる場合は、そうです。ソーシャルネットワークの意味での友情は一義的である可能性があります 、この場合、user_1がfriend user_2を持っているということは、user_2がuser_1を友達として持っているという意味ではありません。または、全単射にすることもできます 、この場合、2つは同等です。ここでは年齢を示していますが、前者はLivejournalで表され、後者はFacebookで表されています。
SQLAlchemyでユニジェクティブな関係を実装する方法が頭からわかりません。それは醜いUNIONALLかMySQLのようなものです。