如果删除了子项,则删除父项

mad*_*ad_ 7 python sqlalchemy one-to-many cascading-deletes

如果子表中的关联行已被删除,我想删除父行。

class Child(Base):
    __tablename__ = "children"

    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey("parents.id", ondelete='CASCADE'))

class Parent(Base):
    __tablename__ = "parents"
    id = Column(Integer, primary_key=True)
    child = relationship(Child, backref="parent", passive_deletes=True)
Run Code Online (Sandbox Code Playgroud)

如果我移除孩子

child_obj = session.query(Child).first()
session.delete(child_obj)
session.commit()
Run Code Online (Sandbox Code Playgroud)

它确实删除了子对象,但父对象保持原样。我也想使用级联删除父级。

MrM*_*ins 2

您可以阅读此主题: Linking Relationships with Backref

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    name = Column(String)

    addresses = relationship("Address", backref="user")

class Address(Base):
    __tablename__ = 'address'
    id = Column(Integer, primary_key=True)
    email = Column(String)
    user_id = Column(Integer, ForeignKey('user.id'))
Run Code Online (Sandbox Code Playgroud)

你可以在你的子类中定义它:

parent = relationship(Parent, backref=backref("children", cascade="all,delete"))
Run Code Online (Sandbox Code Playgroud)