SQLAlchemy - 将模型子类定义为表的子集

7 投票
1 回答
837 浏览
提问于 2025-04-18 16:26

我是刚接触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))

撰写回答