我有以下實體,每個在我的數據庫中的表:sqlalchemy-三個實體通過一個表連接
User
Application
Role
我稱之爲「user_app_role」另一個表看起來像這樣:
table user_app_role(
user_id int not null ,
application_id int not null,
role_id int not null,
primary key(user_id, application_id, role_id)
)
其中,user_id,application_id和role_id都是用戶,應用程序和角色表上的外鍵。
在該表中的條目表明用戶有一個特定的應用程序中的特定角色,因此行可能返回1, 1, 1
表明用戶1擁有應用程序1.類似中的作用1,1, 2, 1
將意味着用戶1也有作用2在應用程序1中。
我有爲用戶,應用程序和角色定義的sqlalchemy映射。我希望User對象具有Application對象列表,並且對於每個Application對象,該對象都將包含一個Role對象列表。
從閱讀sqlalchemy的文檔看來,這種類型的關係是不可能映射的,我發現在stackoverflow上只有幾個其他問題,而這些問題都沒有被回答。這似乎是一個相對正常的3NF數據庫關係(我的整個數據模型中有4個關係),是否可以用sqlalchemy以某種方式設置它?我可以在大約10分鐘內用純SQL完成這件事,但我不想扔掉SqlAlchemy的所有其他有用功能,但如果我無法以某種方式工作,那麼我的應用程序將無法發貨。
此外,請不要暗示,只是我改變我的數據模型或denormalize數據庫或以任何方式混亂。這種性質的答案不會幫助我。我很高興能夠改變我的對象模型或添加額外的對象,如果我需要以某種方式神奇地將這個表映射到2個對象或類似奇怪的東西,但我無法更改數據模型。
我仍然沒有找到這方面的好解決方案,但我最終創建了一個單獨的UserAppRole對象,並在我的User對象中使用了一個關係將它加入UserAppRole。由於我可以加載應用程序和角色對象(並且每個對象中只有很少的對象),因此持久層僅在id不夠的情況下(主要用於顯示在用戶界面中)手動掛接這些值。如果我在接下來的幾天裏沒有得到更好的答案,我會發佈一個更詳細的答案。 –