当SQLAlchemy中的任何父对象不再引用子对象时,自动删除该对象

时间:2015-09-20 03:08:28

标签: python-3.x sqlalchemy

Ba_b_relation= sa.Table('a_b_relation', _Base.metadata, sa.Column('a_oid', sa.Integer, sa.ForeignKey('A.oid')), sa.Column('b_oid', sa.Integer, sa.ForeignKey('B.oid')) ) class A(_Base): __tablename__ = 'A' _oid = sa.Column('oid', sa.Integer, primary_key=True) _bbb = sao.relationship('B', secondary=a_b_relation) class B(_Base): __tablename__ = 'B' _oid = sa.Column('oid', sa.Integer, primary_key=True) 之间存在多对多关系。

B

许多A实例可以引用B的实例。 但是当那里没有参考时,A应该被自动删除。 关键是B实例不会被删除!他们只是修改了与locals的另一个实例的关系。

是否有SQLAlchemy方法可以做到这一点?或者我必须自己检查一下?

1 个答案:

答案 0 :(得分:2)

SQLAlchemy有一个delete-orphan级联,您可以阅读here。但是,它不适用于多对多关系,因为它要求对象具有“单亲”:

  

delete-orphan cascade意味着每个子对象一次只能有一个父对象,所以在绝大多数情况下配置为一对多关系。将它设置为多对一或多对多关系更加尴尬;对于这个用例,SQLAlchemy要求使用single_parent参数配置relationship(),建立Python端验证,确保对象一次只与一个父对象关联。

question讨论与您类似的情况。