簡體   English   中英

如何在SQLAlchemy中建模`UNIQUE`約束?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM