1

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

CREATE TABLE authentications (
 id 
)

CREATE TABLE password_authentications (
 id
 password
) inherits (authentications)

这非常优雅,因为我还有一个名为“Users”的表,它在身份验证表中有一个外键:

CREATE TABLE users (
 id
 username
 authentications_id
)

因此,用户可以通过继承自身份验证的任何内容进行身份验证。因此,将来,如果我们需要使用 RSA(例如)对用户进行身份验证,我要做的就是从描述 RSA 身份验证的身份验证中创建一个基类。

现在我想使用 SQLAlchemy 在 Python 类和这个结构之间建立一个映射。具体来说,我想将一个名为“User”的类映射到名为“ users ”的表(这很容易完成),但我想要一个关于 password_authentication 的关系(而不是关于身份验证)。事实上,我希望动态地建立这种关系,所以如果一个用户使用密码进行身份验证,那么 SQLAlchemy 会将“Users”表链接到“Password_Authentications”表。如果存在其他类型的身份验证,则应将用户链接到该表。用户将链接到的所有表的唯一共同点是它们是从 Authentications 表派生的。因此,“用户”表在该表中有一个外键。

我怎样才能完成上述工作?甚至可能吗?

4

1 回答 1

3

SA 在模型对象继承方面不支持INHERITSof postgresql。但是,请查看PostgreSQLInheritance recipe,其中Mike展示了如何将两者结合使用及其局限性。

另请参阅Python, SQLAlchemy 和 Postgresql的答案:了解继承,其中TokenMacGuyInheritance in terms of OOP解释了和之间的区别postgresql table inheritance


从链接资源中发布代码示例会导致不必要的重复和相当冗长的答案,仍然无法为您提供完整的解决方案。

于 2012-06-28T20:46:53.157 回答