El patrón que intenta implementar es un caso especial de relación de muchos a muchos. SQLAlchemy llama a esto una relación de lista de adyacencia, y recomiendo tratar de seguir el código allí:
http://docs.sqlalchemy.org/en /rel_0_9/orm/relationships.html#adjacency-list-relationships
La clave es el kwarg 'remote_side' allí.
He aquí por qué:el error que está recibiendo se debe a que su tabla de asociación ('amigos') tiene dos claves externas que apuntan a la tabla 'usuarios':una en la columna 'user_id' y otra en la columna 'friend_id'. SQLAlchemy intenta detectar automáticamente las relaciones basadas en claves externas, pero falla porque no puede decir en qué dirección va la relación. Entonces, si tiene una entrada en la tabla 'amigos' así
user_id : 1
friend_id : 2
SQLAlchemy no puede saber si user_1 tiene a user_2 como amigo o viceversa.
Si eso parece confuso, lo es. La amistad en el sentido de las redes sociales puede ser uniyectiva , en cuyo caso el usuario_1 tiene como amigo al usuario_2 no significa que el usuario_2 tenga al usuario_1 como amigo; o puede ser biyectiva , en cuyo caso los dos son equivalentes. Estoy mostrando mi edad aquí, pero la primera está representada por Livejournal, mientras que la segunda está representada por Facebook.
No sé muy bien cómo implementar una relación unijetiva en SQLAlchemy. Es un UNION ALL feo o algo así en MySQL.