【发布时间】:2010-10-18 22:40:21
【问题描述】:
我正在尝试使用 SQLAlchemy 实现基本的用户组模型,其中用户可以有多个组,组可以有多个用户。
当一个组变为空时,我希望删除该组(以及与该组相关的其他内容。幸运的是,SQLAlchemy 的级联可以很好地处理这些更简单的情况)。
问题在于 cascade='all, delete-orphan' 并不能完全满足我的要求;当群组为空时,它不会删除群组,而是在 任何 成员离开群组时删除群组。
向数据库添加触发器可以在组变为空时很好地删除组,但触发器似乎绕过了 SQLAlchemy 的级联处理,因此与组关联的内容不会被删除。
当所有成员都离开并将此删除级联到相关实体时,删除组的最佳方法是什么。
我知道我可以手动执行此操作,方法是在我的代码中找到用户可以离开组的每个位置,然后执行与触发器相同的操作,但是,我担心我会错过代码中的位置(并且我很懒)。
【问题讨论】:
-
我认为在没有更多关于代码的细节的情况下回答这个问题可能有点棘手(你是如何设置多对多关系的,你把删除孤儿放在哪里,等),大致是什么架构等。
-
我在 backref 和正常的关系()上尝试了 delete-orphan。关系基本上是mapper(User, users, properties={'groups': relation=relation(Group, secondary=users_groups, backref=backref('users'))})
标签: python sqlalchemy