我正在编写一个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做这样的事情,您有什么好的例子或解释吗?
问题的第一部分(关于创建具有多个列的唯一约束)已经是answered by cleg。
但是,如果要在映射表中添加列,则默认的多对多方法不起作用。相反,您应该使用Association Object Pattern。此外,还可以使用association_proxy简化用户和组之间的访问。
从SQLAlchemy examples开始的^{} 应该是一个很好的开始。
在模型中使用
UniqueConstraint
。在这个问题中有详细的描述:sqlalchemy unique across multiple columns至于多对多关系,SQLAlchemy有pretty good tutorial。
抱歉,我错过了答案的第二部分(这比我想象的要复杂,所以请看@schlamar的答案),但第一部分仍然是正确的。
相关问题 更多 >
编程相关推荐