如何按最新子项中的列过滤sqlalchemy查询

miq*_*miq 5 python sql postgresql sqlalchemy

我目前有两个表大致描述如下SQLAlchemy映射:

class Parent(Base):
    __tablename__ = "parent"

    parent_id = Column(Integer, primary_key=True)

class Child(Base):
    __tablename__ = "child"

    child_id = Column(Integer, primary_key=True)
    parent_id = Column(Interger, ForeignKey(parent.parent_id))
    child_timestamp = Column(TIMESTAMP)

    parent = relationship("Parent", backref=backref("children", order_by=child_id))
Run Code Online (Sandbox Code Playgroud)

所以我从父母到孩子之间有一对多的关系.我需要做的是创建一个查询来获取所有父项目的最新(按时间戳)子项目与给定日期范围匹配.

我不能在Child表上做一个子查询,我按日期过滤并在连接中使用它,因为这也会考虑旧项目.

有没有办法构建只考虑最新子时间的查询,或者我只需要在Parent上有一个额外的列来跟踪最新插入的Child的child_id?

谢谢你的帮助.

dav*_*ism 5

首先,使用子查询获取每个父级的最新子时间戳.然后查询父项,加入子查询以用于过滤.

sub = session.query(
    Child.parent_id,
    func.max(Child.child_timestamp).label('child_latest')
).group_by(Child.parent_id
).subquery()

parents = session.query(Parent
).join((sub, sub.c.parent_id == Parent.id)
).filter(sub.c.child_latest.between(lower_date, upper_date)
).all()
Run Code Online (Sandbox Code Playgroud)