繁体   English   中英

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

[英]How to filter a sqlalchemy query by a column in latest child item

我目前有2个表,大致描述如下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))

因此,我与父母之间存在一对多的关系。 我需要做的是创建一个查询,以获取所有最新(按时间戳记)子项与给定日期范围匹配的所有父项。

我无法在子表上执行子查询,在子表中我无法按日期过滤并将其用于联接中,因为这也会考虑到较旧的项。

有没有一种方法可以构造只考虑最近子时间的查询,还是只需要在Parent上增加一列来跟踪最近插入的Child的child_id?

谢谢你的帮助。

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

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM