我正在编写一个 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
约束字段。
我在数据库设计、ORM 和 SQLAlchemy 方面没有太多经验,所以这可能很明显,但我找不到表达它的方法。
我没有得到的事情是:使用常规的多对多关系,我的 User
类有一个 list-like 属性 groups
其中包含他所属的所有组,但这完全隐藏了 UserGroups
连接表,我不知道如何访问 UserNumber
字段。
这对我来说有点模糊。关于如何使用 SQLAlchemy 做这样的事情,您有什么很好的例子或解释吗?
最佳答案
问题的第一部分(关于创建具有多列的唯一约束)已经是 answered by cleg .
但是,如果您想在映射表中添加额外的列,则默认的多对多方法不起作用。相反,您应该使用 Association Object Pattern .此外,您可以使用association_proxy 简化用户和组之间的访问。 .
proxied_association.py
来自 SQLAlchemy examples应该是一个很好的起点。
关于python - 如何在 SQLAlchemy 中模拟 `UNIQUE` 约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14355499/