【问题标题】:SQLAlchemy model constraints across multiple models跨多个模型的 SQLAlchemy 模型约束
【发布时间】:2021-03-01 06:07:47
【问题描述】:

我正在尝试找出围绕一组模型开发约束的最佳方法

class ParentDefinition:
    child_definition = relationship()

class ChildDefinition:
    parent_definition_id = ForeignKey()

class Parent:
    parent_definition = relationship()
    parent_definition_id = ForeignKey()

class Child:
    parent = relationship()
    parent_id = ForeignKey()

    child_definition = relationship()
    child_definition_id = ForeignKey()

我想确保Child.child_definition_id == Child.parent.parent_definition.child_definition.id,但我不确定最好的方法。

我知道这可能不是最好的模型设计,但我正在考虑一些预先存在的架构考虑因素。

任何帮助将不胜感激!

【问题讨论】:

    标签: python postgresql orm sqlalchemy


    【解决方案1】:

    根据文档here,您需要为表或列定义约束。据我所知,不能在多个表上设置 SQL 约束。

    如果你真的想通过约束,你可以使用另一个表来处理每个实体之间的关联约束字段(每个项目的 id 并将你的约束添加到 id_parent_def = id_child_def)。

    如果您不想创建此表,您可以随时使用listeners,以便在插入数据之前进行检查,但这可能无法满足您的需求。

    另一种方法是使用可以为您检查条件的数据库特定函数或触发器,我猜您会在迁移文件中编写普通 SQL 来创建它们(或在您的数据库中手动创建)。

    【讨论】:

      猜你喜欢
      • 2020-04-13
      • 2011-08-25
      • 2015-06-15
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 2019-02-15
      相关资源
      最近更新 更多