python - 如何在 SQLAlchemy 中模拟 `UNIQUE` 约束?

标签 python flask sqlalchemy flask-sqlalchemy

我正在编写一个 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/

相关文章:

python - 如何创建来自机器人的嵌入消息?

python - WTForms render_field() 方法引用 for 循环变量

python - 来自多个 worker 的 Gunicorn 日志记录

python - Flask session 变量

python - SQLAlchemy:带有 GENERATED ALWAYS AS 的 MySQL 列 DDL

python - pandas dataframe to sql - 将数据附加到现有表而不重复

python - 如何用dfs找到最长的最小跳跃?

python - 带有 BERT 的 NER 的合并输出与序列输出

python - 为使用 Flask 发送的电子邮件创建一个安全的退订链接

python - 有没有办法透明地对 SQLAlchemy 对象执行验证?