Mô hình bạn đang cố gắng triển khai là một trường hợp đặc biệt của mối quan hệ nhiều người. SQLAlchemy gọi đây là Mối quan hệ Danh sách Gần kề và tôi khuyên bạn nên thử làm theo mã ở đó:
http://docs.sqlalchemy.org/en /rel_0_9/orm/relationships.html#adjacency-list-relationships
Chìa khóa là kwarg 'remote_side' ở đó.
Đây là lý do tại sao:lỗi mà bạn gặp phải là do bảng liên kết của bạn ('bạn bè') có hai khóa ngoại trỏ đến bảng 'người dùng':một trên cột 'user_id' và một trên cột 'friend_id'. SQLAlchemy cố gắng tự động phát hiện các mối quan hệ dựa trên các khóa ngoại, nhưng nó không thành công vì nó không thể cho biết mối quan hệ đi theo hướng nào. Vì vậy, nếu bạn có một mục trong bảng 'bạn bè' như vậy
user_id : 1
friend_id : 2
SQLAlchemy không thể biết liệu user_1 có user_2 là bạn hay ngược lại.
Nếu điều đó có vẻ khó hiểu, thì đúng là như vậy. Tình bạn theo nghĩa của các mạng xã hội có thể là duy nhất , trong trường hợp người dùng_1 có bạn là người dùng_2 không có nghĩa là người dùng_2 có người dùng_1 là bạn; hoặc nó có thể là bijective , trong trường hợp đó cả hai là tương đương. Tôi đang hiển thị tuổi của mình ở đây, nhưng cái trước được đại diện bởi Livejournal, trong khi cái sau được đại diện bởi Facebook.
Tôi không biết cách triển khai mối quan hệ thống nhất trong SQLAlchemy. Đó là một UNION TẤT CẢ hoặc một cái gì đó tương tự trong MySQL.