SQL Alchemy - 从一个实体上的多个一对一关系中删除孤儿[关闭]

Posted

技术标签:

【中文标题】SQL Alchemy - 从一个实体上的多个一对一关系中删除孤儿[关闭]【英文标题】:SQL Alchemy - delete orphan from multiple one to one relationships on one entity [closed] 【发布时间】:2021-10-31 04:00:57 【问题描述】:

我在一张表上定义了这两个一对一的关系。

    home_lineup_id = Column(Integer, ForeignKey("Lineup.id"))
    home_lineup = relationship("Lineup", foreign_keys=[home_lineup_id], cascade="all, delete-orphan", single_parent=True)
    guest_lineup_id = Column(Integer, ForeignKey("Lineup.id"))
    guest_lineup = relationship("Lineup", foreign_keys=[guest_lineup_id], cascade="all, delete-orphan", single_parent=True)

很明显,我希望删除孤儿功能起作用。这个解决方案相当奇怪地只删除了第一个关系中大概有一半的阵容。

有什么办法可以做到吗?

编辑:我正在使用 PostgreSQL。

【问题讨论】:

我只是尝试使用 mssql+pyodbc:// 重现您的问题,但无法这样做。你能提供一个minimal reproducible example 来说明吗?请注意,当涉及到外键时,SQLite 可能会令人困惑,因为默认情况下它会创建它们,但不会强制它们。 我正在使用 PostgreSQL。我应该提到这一点。 - 但这不重要,因为这是不应该依赖数据库的 AFAIK ORM 级别实现。 @戈德汤普森 对我来说也适用于 PostgreSQL。无论如何,This code 确实如此。 谢谢。这可能有点尴尬,但结果证明是一个错字——我有分配这两种关系的函数——但经过一些重构后,我将两个实体分配给了相同的关系。 【参考方案1】:

事实证明,这段代码完全没问题,可以按预期工作。这只是别处的一个错字。

【讨论】:

以上是关于SQL Alchemy - 从一个实体上的多个一对一关系中删除孤儿[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Alchemy奇怪的行为从同一个表中加入多个列

SQL - 多个一对多关系

SQL Alchemy - 从 Oracle 迁移到 MySQL 的 Python 脚本

在 SQL Alchemy ORM 中使用辅助连接

使用 SQL Alchemy 和 pymssql 指定故障转移伙伴

Hibernate - 第一个 Sql 插入需要很长时间