Postgresql Postgres继承与SQLAlchemy:SQLAlchemy关系
我有许多类型的身份验证,因此我有一个基本postgres表(称为“身份验证””),其他类型的身份验证都是从中派生出来的。例如,使用密码进行身份验证的实体称为“password\u authentications”,它使用postgres从“authentications”表继承。因此,模式是:Postgresql Postgres继承与SQLAlchemy:SQLAlchemy关系,postgresql,sqlalchemy,Postgresql,Sqlalchemy,我有许多类型的身份验证,因此我有一个基本postgres表(称为“身份验证””),其他类型的身份验证都是从中派生出来的。例如,使用密码进行身份验证的实体称为“password\u authentications”,它使用postgres从“authentications”表继承。因此,模式是: CREATE TABLE authentications ( id ) CREATE TABLE password_authentications ( id password ) inherit
CREATE TABLE authentications (
id
)
CREATE TABLE password_authentications (
id
password
) inherits (authentications)
这非常优雅,因为我还有一个名为“Users”的表,在authentications表中有一个foreignkey:
CREATE TABLE users (
id
username
authentications_id
)
因此,用户可以通过从身份验证继承的任何东西进行身份验证。所以在将来,如果我们需要使用RSA对用户进行身份验证(例如),我所要做的就是从描述RSA身份验证的身份验证中创建一个基类
现在我想使用SQLAlchemy在Python类和该结构之间构建映射。具体地说,我想将一个名为“User”的类映射到名为“users”的表(这很容易做到),但我想在密码验证(而不是身份验证)上建立一种关系。事实上,我希望动态地建立这种关系,因此如果一个用户使用密码进行身份验证,那么SQLAlchemy将把“Users”表链接到“password\u Authentications”表。如果存在其他类型的auhentication,则应该将用户链接到该表。用户将链接到的所有表的唯一共同点是它们都是从Authentications表派生的。因此,“Users”表在这个表中有一个foreignkey
我怎样才能做到以上几点?甚至可能吗?SA在模型对象继承方面不支持
postgresql
的INHERITS
。然而,请看一下配方,其中展示了如何将两者结合使用及其局限性
另请参阅的答案,其中解释了在OOP方面继承与postgresql表继承之间的区别
从链接资源中发布代码示例将导致不必要的重复和相当长的回答,这仍然无法为您提供完整的解决方案。但是每个postgres表都有一个tableoid列,可以很容易地用作具体继承的鉴别器。所以我不明白为什么这行不通!为什么我不能将具体的表继承与tableoid一起用作鉴别器???我相信您可以使它工作,但它不会像您想象的那样好和可移植:1)您无法控制tableoid
s;2) 它们是数字的,可读性不强;3) 此外,您还必须在Python模型中为每个polymorphic\u标识
值硬编码它们的值;4) 一旦您从test
迁移到production
,表OID
可能会再次不同,因此您必须更改代码库以使其正常工作;。。。我确信还有其他的警告,我甚至想不起来,因为我没有使用postresql
。