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
添加回答
舉報