[英]How to model a `UNIQUE` constraint in SQLAlchemy?
我正在编写一个Flask / SQLAlchemy应用程序,其中包含用户和组。
用户可以属于多个组,并且每个组中都有唯一的编号 。 询问如何建模数据库我被建议使用以下表结构来实现我的多对多关系:
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
类有一个类似列表的属性groups
,其中包含他所属的所有组,但这完全隐藏了UserGroups
-table和我不知道如何访问UserNumber
字段。
这对我来说有点模糊。 你对SQLAlchemy如何做这样的事情有什么好的例子或解释吗?
问题的第一部分(关于创建具有多列的唯一约束)已经由cleg回答 。
但是,如果要在映射表中另外添加列,则默认的多对多方法不起作用。 相反,您应该使用关联对象模式 。 此外,您可以使用association_proxy简化用户和组之间的访问。
SQLAlchemy示例中的proxied_association.py
应该是一个很好的起点。
在模型中使用UniqueConstraint
。 详细描述了这个问题: sqlalchemy在多个列中是唯一的
对于多对多关系,SQLAlchemy有很好的教程 。
PS对不起,我错过了第二部分的回答(它比我想的更复杂,所以请看@schlamar的答案),但第一部分仍然是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.