多个manytomy关系上的SQLAlchemy级联删除

2024-10-01 05:03:14 发布

您现在位置:Python中文网/ 问答频道 /正文

一个正确的定义是多个删除的方式。在

尝试实现这样一种设置,即只删除用户即可删除用户以及存储在“用户收藏夹”中的关系。在

不同的场景导致user+关系和user favorited_by where deleted。在

增加复杂性的是以下参数,这些参数可以添加到关系backref。在

目标: 删除第一个用户不应导致删除第二个受青睐的用户。只应删除第一个用户和关系。在

    class User(Base):
        __tablename__ = 'user'
        id = Column(Integer, primary_key=True)
        username = Column(String(30), nullable=False, unique=True, index=True)

        favorites = relationship("User", secondary='user_favorited',
            primaryjoin=UserFavorited.user_id==id,
            secondaryjoin=UserFavorited.favorite_user_id==id,
            backref=backref('favorites_list', lazy='dynamic', cascade='all,delete-orphan'),
            cascade="all",
            order_by=UserFavorited.favorited_on.desc())

        favorited_by = relationship("User", secondary='user_favorited',
            primaryjoin=UserFavorited.favorite_user_id==id,
            secondaryjoin=UserFavorited.user_id==id,
            backref=backref('favorited_list', lazy='dynamic', cascade='all,delete-orphan'),
            cascade="all",
            order_by=UserFavorited.favorited_on.desc())


   class UserFavorited(Base):
       __tablename__ = 'user_favorited'
       user_id = Column(Integer, ForeignKey('user.id'), primary_key=True)
       favorite_user_id = Column(Integer, ForeignKey('user.id'), primary_key=True, index=True)
       favorited_on = Column(DateTime(timezone=True), nullable=False)

Tags: 用户idtrueby关系columnintegerall