SQLAlchemy - 将模型子类定义为表的子集
我是刚接触SQLAlchemy的新手。
我想定义一个模型的子类,这个子类代表表中数据的一个子集。具体来说,我希望这个子类能够映射出某个ID的最新一行数据。
举个例子,假设我有以下这个模型:
class AddressHistory(Base):
__table__ = 'address_table'
date = Column(Date, index=True, nullable=False)
id = Column(BigInteger, primary_key=True)
street = Column(String(2000))
city = Column(String(2000))
state = Column(String(2000))
zip = Column(Integer)
我想做的是定义这个模型的一个子类,专门表示某个ID的最新地址记录:
class MostRecentAddress(Address):
“””
Represents a row in AddressHistory with the most recent date for a given id.
”””
有没有什么方法可以把一个子查询传给mapper_args
?或者有没有办法把表定义成一个选择语句?
1 个回答
3
你在寻找单表继承的方式。
https://docs.sqlalchemy.org/en/13/orm/inheritance.html#single-table-inheritance
你的代码示例几乎就是实现这个功能的正确方法。你只需要添加一个映射器。
class Person(Base):
__tablename__ = 'people'
id = Column(Integer, primary_key=True)
discriminator = Column('type', String(50))
__mapper_args__ = {'polymorphic_on': discriminator}
class Engineer(Person):
__mapper_args__ = {'polymorphic_identity': 'engineer'}
primary_language = Column(String(50))