Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres继承与SQLAlchemy:SQLAlchemy关系_Postgresql_Sqlalchemy - Fatal编程技术网

Postgresql Postgres继承与SQLAlchemy:SQLAlchemy关系

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

我有许多类型的身份验证,因此我有一个基本postgres表(称为“身份验证””),其他类型的身份验证都是从中派生出来的。例如,使用密码进行身份验证的实体称为“password\u authentications”,它使用postgres从“authentications”表继承。因此,模式是:

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