【发布时间】:2021-02-05 12:08:53
【问题描述】:
我有一种情况,我想在删除键(父)时删除它的所有值(子),以及子和 Foo 之间的 MTM 关联中的相关行。 模型如下(部分属性去掉):
class Key(Model):
...
values = relationship('Value', back_populates='key', cascade='all, delete-orphan')
class Value(Model):
value = Column(Text, nullable=False)
key = relationship("Key", back_populates="values")
key_id = Column(Integer, ForeignKey("keys.id"))
class Foo(Model):
...
taglist = db.relationship("Value",
order_by="desc(Value.created)",
secondary=association_table,
lazy='dynamic')
而association_table 只是一个经典的 FKFK 表:
Table("association_table",
Model.metadata,
Column("foo.id", Integer, ForeignKey("foos.id"),
Column("value.id", Integer, ForeignKey("values.id"),)
通过此设置,使用postgres,当我尝试删除密钥时,我得到以下信息:
(psycopg2.errors.ForeignKeyViolation) update or delete on table "values" violates foreign key constraint "association_table_value_id_fkey" on table "association_table"
现在,阅读https://docs.sqlalchemy.org/en/14/orm/basic_relationships.html#relationships-many-to-many-deletion 文档,我已经尝试了那里的示例,这些示例似乎大多是在您的关联表上放置ondelete="CASCADE",但这会导致同样的问题。
有没有办法可以做我想做的事,例如从 MTM 表中“取消链接” foo 对象(不删除 它们)?
提前感谢您的帮助
【问题讨论】:
标签: python postgresql flask sqlalchemy