我有以下结构:
import sqlalchemy as sa
import sqlalchemy.orm as orm
Base = orm.declarative_base()
class Equity(Base) :
__tablename__ = 'equities'
id = sa.Column(sa.String, primary_key=True)
name = sa.Column(sa.String, nullable=False)
currency = sa.Column(sa.String, nullable=False)
country = sa.Column(sa.String, nullable=False)
sector = sa.Column(sa.String, nullable=True)
def __repr__(self) :
return f"Equity('Ticker: {self.id}', 'Name: {self.name}')"
class Bond(Base) :
__tablename__ = 'bonds'
id = sa.Column(sa.String, primary_key=True)
name = sa.Column(sa.String, nullable=False)
country = sa.Column(sa.String, nullable=False)
currency = sa.Column(sa.String, nullable=False)
sector = sa.Column(sa.String, nullable=False)
def __repr__(self) :
return f"Bond('Ticker: {self.id}', 'Name: {self.name}')"
并且我想在数据库中创建一个新的永久表,它是这两个表的UNION(使用列ID和CURRENCY)
我知道我可以用这个在外面创造出这样的效果:
results = session.query(Equity.id, Equity.currency).union(session.query(Bond.id, Bond.currency))
但我希望(如果可能的话)在数据库中有一个关系表,当我在EQUITIES或BONDS表中更改任何内容时,它会自动更新。
class NewUnionTable(Base) :
<relationship><union>
有人能帮我做这个吗?非常感谢
1条答案
按热度按时间cigdeys31#
从Views recipe和您的类(简化)中,下面是列集合的并集视图的功能版本。
阅读recipe以了解更多细节,但它只是创建必要的编译器扩展,并在适当的时候通过事件使用它们。
**NB.**这是一个
union
,所以它只有不同的值。请注意,插入了四个示例,但视图中只有三个。这种重复数据删除(排序+筛选)在大型数据集上速度很慢,如果您不介意,请使用允许重复的union_all
。