【发布时间】:2020-04-29 19:36:32
【问题描述】:
我了解到 SQLAlchemy 实现了一些外键处理,例如在删除父级时将它们设置为空,与数据库分开,这意味着它们可以设置为不同的行为,并且可以通过不同的方式来做同样的事情一。示例:
我有Comment 和Subscription,其中Subscription 与Comment 有外键关系。我首先在Subscription的关系上设置backref = backref('subs', cascade = 'delete, delete-orphan'),结果是session.delete(comment)会正确删除评论上的订阅,但session.query(Comment).filter_by(id = id).delete()会因外键违规而失败,因为设置了级联在 ORM 级别而不是 Postgres 级别。
不用说,我觉得这很令人困惑,我想禁用它,以便删除时的所有外键处理都由 Postgres 完成。我没有找到一种明显的方法来查看文档。我读到了passive deletes,这听起来像是我想要的,只是它不适用于已经加载到会话中的对象。
有没有办法在删除时禁用所有 ORM 级别的外键处理?有充分的理由不这样做吗?
【问题讨论】:
标签: sql postgresql sqlalchemy