如何在SQLAlchemy中建模一个“UNIQUE”约束?

2024-05-20 03:13:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个Flask/SQLAlchemy应用程序,其中有用户和组。

用户可以属于多个组,并且在每个组中都有一个唯一的编号。Asking about how to model the database建议我对多对多关系使用以下表结构:

TABLE UserGroups
  GroupID 
  UserID
  UserNumber
  PRIMARY KEY (GroupID, UserID)
  UNIQUE (GroupID, UserNumber)
  FOREIGN KEY (GroupID)
    REFERENCES Groups (GroupID)
  FOREIGN KEY (UserID)
    REFERENCES Users (UserID)

现在我知道如何用SQLAlchemy创建一个规则的多对多关系,但是我不知道如何用附加的UserNumber字段表示UNIQUE约束。

我在数据库设计、ORMs和SQLAlchemy方面没有太多经验,所以这可能是显而易见的,但是我找不到表达它的方法。

我不知道的是:使用一个规则的多对多关系,我的User类有一个列表,比如属性groups,它包含他所属的所有组,但是这完全隐藏了UserGroups连接表,我不知道如何访问UserNumber字段。

这对我来说有点模糊。对于如何使用SQLAlchemy做这样的事情,您有什么好的例子或解释吗?


Tags: key用户应用程序flasksqlalchemy关系规则编号
2条回答

问题的第一部分(关于创建具有多个列的唯一约束)已经是answered by cleg

但是,如果要在映射表中添加列,则默认的多对多方法不起作用。相反,您应该使用Association Object Pattern。此外,还可以使用association_proxy简化用户和组之间的访问。

SQLAlchemy examples开始的^{}应该是一个很好的开始。

在模型中使用UniqueConstraint。在这个问题中有详细的描述:sqlalchemy unique across multiple columns

至于多对多关系,SQLAlchemy有pretty good tutorial

抱歉,我错过了答案的第二部分(这比我想象的要复杂,所以请看@schlamar的答案),但第一部分仍然是正确的。

相关问题 更多 >