1 回答
TA贡献1793条经验 获得超6个赞
如果表用户的目的只是存储公共数据,您可以使用 postgres继承。
在一个非常简化的模型中,您可以拥有:包含所有常见数据的父表
create table user_(
type varchar(1)
);
和你的孩子:
create table zeepdr(
id integer primary key,
nin varchar
) inherits(user_);
create table merchant(
id integer primary key,
ticker char(4)
) inherits(user_);
SQLAlchemy 中对应的代码应该是这样的:
Table("zeepdr", metadata, ..., postgresql_inherits="user_")
基本用法
插入
根据我对山羊的看法,您不需要既不是商人也不是 zeepdr 的用户,因此您将插入数据,就好像父表不存在一样:
insert into zeepdr(id, type, nin) values(1,'Z','a');
insert into merchant(id, type, ticker) values(1,'M','aaaa');
这也意味着用户将是商人或 zeepdr。
选择
select * from zeepdr;
行为如你所料。此外,如果您只想从所有用户那里检索公共数据,您可以使用关键字ONLY:
select * from ONLY user_;
或在 SQLAlchemy
result = table.select().with_hint(table, 'ONLY', 'postgresql')
更多信息:约束
除非您使用NO INHERIT. 其他类型没有继承。
最后一点
有关继承和 SQLAlchemy 的更多信息here
添加回答
举报