python - update - sqlalchemy orm




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

我正在寫一個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應該是一個很好的開始。


在你的模型中使用UniqueConstraint 。 在這個問題中詳細描述: sqlalchemy跨多個列是唯一的

至於多對多的關係,SQLAlchemy有相當不錯的教程

PS對不起,我錯過了答案的第二部分(這是更複雜,然後我想,所以看到@schlamar答案),但第一部分仍然是正確的。







flask-sqlalchemy