Pola yang Anda coba terapkan adalah kasus khusus dari hubungan banyak ke banyak. SQLAlchemy menyebut ini sebagai Hubungan Daftar Ketetanggaan, dan saya sarankan untuk mencoba mengikuti kode di sana:
http://docs.sqlalchemy.org/en /rel_0_9/orm/relationships.html#adjacency-list-relationships
Kuncinya adalah kwarg 'remote_side' di sana.
Inilah alasannya:kesalahan yang Anda dapatkan adalah karena tabel asosiasi Anda ('teman') memiliki dua kunci asing yang menunjuk ke tabel 'pengguna':satu di kolom 'user_id', dan satu di kolom 'friend_id'. SQLAlchemy mencoba mendeteksi hubungan secara otomatis berdasarkan kunci asing, tetapi gagal karena tidak dapat menentukan arah hubungan. Jadi jika Anda memiliki entri di tabel 'teman' seperti itu
user_id : 1
friend_id : 2
SQLAlchemy tidak bisa membedakan apakah user_1 memiliki user_2 sebagai teman, atau sebaliknya.
Jika itu tampak membingungkan, memang begitu. Persahabatan dalam arti jejaring sosial bisa unijektif , dalam hal ini pengguna_1 memiliki teman pengguna_2 tidak berarti bahwa pengguna_2 memiliki pengguna_1 sebagai teman; atau bisa juga bijektif , dalam hal ini keduanya setara. Saya menunjukkan usia saya di sini, tetapi yang pertama diwakili oleh Livejournal, sedangkan yang terakhir diwakili oleh Facebook.
Saya tidak tahu dari atas kepala saya bagaimana menerapkan hubungan unijective di SQLAlchemy. Ini adalah UNION ALL yang jelek atau semacamnya di MySQL.