【发布时间】:2015-06-19 14:37:25
【问题描述】:
使用 SQLAlchemy,我无法弄清楚如何映射以下关系:用户可以被其他用户“关注”,从而成为具有“关注者”的“领导者”。
class User( Base ):
__tablename__ = 'users'
id = Column( Integer, primary_key = True )
followers = relationship( 'User', primaryjoin = 'and_( User.id == UserFollower.leader_id )', cascade = 'all' )
leaders = relationship( 'User', primaryjoin = 'and_( User.id == UserFollower.follower_id )', cascade = 'all' )
class UserFollower( Base ):
__tablename__ = 'users_followers'
leader_id = Column( Integer, ForeignKey( 'users.id' ), primary_key = True )
follower_id = Column( Integer, ForeignKey( 'users.id' ), primary_key = True )
follower = relationship( 'User', uselist = False, foreign_keys = [ follower_id ] )
leader = relationship( 'User', uselist = False, foreign_keys = [ leader_id ] )
从文档中我的印象是这样的声明会有
some_user.followers
在“users.id = users_followers.leader_id”上执行“users”和“users_followers”表的连接,其中“user.id = some_user.id”。
但是,这会产生错误(类似于How to specify table relationships in SQLAlchemy with multi-level/multiple joins?)。虽然建议的解决方案允许我解决这个问题,但它阻止了使用 SQLAlchemy 关系的“级联”属性,因此在删除用户时,相应的 UserFollower 对象也会被删除。
总而言之:如何将关系加入到具有多个外键引用同一个键的表中,并且仍然保留级联(删除)?
【问题讨论】:
标签: python sqlalchemy