我有多種類型的認證,因此,我有一個基postgres的表(稱爲「認證」),以及其他類型的認證被從它派生。例如,使用密碼進行身份驗證的實體稱爲「password_authentications」,並使用postgres從「身份驗證」表中繼承。該模式是這樣的:Postgres的繼承與SQLAlchemy的:SQLAlchemy的關係
CREATE TABLE authentications (
id
)
CREATE TABLE password_authentications (
id
password
) inherits (authentications)
這是非常優雅的,因爲我也有一個名爲「用戶」表中有一個外鍵進入認證表:
CREATE TABLE users (
id
username
authentications_id
)
因此用戶可以通過認證任何繼承認證的東西。所以在將來,如果我們需要使用RSA對用戶進行身份驗證(例如),我所要做的就是從描述RSA身份驗證的身份驗證中創建一個基類。
現在我想用SQLAlchemy建立Python類和這個結構之間的映射。具體來說,我想映射一個名爲「User」的類到名爲「users」的表(這很容易完成),但我想要在password_authentication(而不是身份驗證)上建立關係。實際上,我期望動態地建立這種關係,所以如果一個用戶使用密碼進行身份驗證,那麼SQLAlchemy會將「Users」表連接到「Password_Authentications」表。如果存在另一種類型的認證,則用戶應該鏈接到該表。用戶將鏈接到的所有表格的唯一共同之處在於它們來自Authentications表。因此,「用戶」表有一個外鍵到這個表中。
我該如何完成上述操作?它甚至有可能嗎?
但是每個postgres表都有一個tableoid列,它可以非常容易地用作混淆繼承的鑑別器。所以我不明白爲什麼這不起作用! –
爲什麼我不能用tableoid作爲鑑別器來使用具體的表繼承? –
我相信你可以使它工作,但它不會像你想象的那麼好和便攜:1)你無法控制'tableoid'; 2)它們是數字的,並非如此*可讀*; 3)你也必須在你的Python模型中爲每個'polymorphic_identity'值硬編碼它們的值; 4)當你從'test'移植到'production'時,'tableoid'可能又會有所不同,所以你將不得不改變你的代碼庫來使它工作;我相信還有其他的一些注意事項,我甚至無法想象,因爲我不使用'postresql'。 – van