sqlalchemy查询 - python sqlalchemy




如何在SQLAlchemy中建立`UNIQUE`约束? (2)

在你的模型中使用UniqueConstraint 。 在这个问题中详细描述: sqlalchemy跨多个列是唯一的

至于多对多的关系,SQLAlchemy有相当不错的教程

PS对不起,我错过了答案的第二部分(这是更复杂,然后我想,所以看到@schlamar答案),但第一部分仍然是正确的。

我正在写一个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 ,其中包含他所属的所有组,但是这完全隐藏了用户组加入表和我不知道如何访问UserNumber字段。

这对我来说都是模糊的。 你有什么好的例子或解释怎么用SQLAlchemy做这样的事情?


问题的第一部分(关于用多列创建唯一约束)已经由cleg回答了 。

但是,如果要在映射表中另外添加列,默认的多对多方法不起作用。 相反,你应该使用关联对象模式 。 另外,您可以通过association_proxy简化用户和组之间的访问。

SQLAlchemy示例中proxied_association.py应该是一个很好的开始。





flask-sqlalchemy