Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy级联删除多对多关系_Python_Sql_Sqlalchemy - Fatal编程技术网

Python SQLAlchemy级联删除多对多关系

Python SQLAlchemy级联删除多对多关系,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,在多对多关系上定义删除级联的正确方法是什么 试图实现这样一种设置,即只删除一个用户将删除用户以及存储在'user\u favorited'中的关系 不同的场景导致用户+关系和用户偏好/偏好被删除 class User(Base): __tablename__ = 'user' id = Column(Integer, primary_key=True) username = Column(String(30), nullable=False

在多对多关系上定义删除级联的正确方法是什么

试图实现这样一种设置,即只删除一个用户将删除用户以及存储在'user\u favorited'中的关系

不同的场景导致用户+关系和用户偏好/偏好被删除

    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)
增加复杂性的是可以添加到关系和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)