A
和B
之间存在多对多关系
a_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
的另一个实例。
是否有SQLAlchemy方法来做到这一点?还是我要自己检查一下?
SQLAlchemy有一个delete-orphan
级联,您可以在这里阅读。然而,它不适用于多对多关系,因为它要求对象具有"单亲":
delete-orphan cascade意味着每个子对象一次只能有一个父对象,因此在绝大多数情况下是在一对多关系上配置的。将其设置为多对一或多对多关系会更尴尬;对于这个用例,SQLAlchemy要求用single_parent参数配置relationship(),建立python端验证,确保对象一次只与一个父对象关联。
这个问题讨论的情况和你的问题类似。