如何从SQLAlchemy获取最新的对象

时间:2016-06-16 00:36:18

标签: python sqlalchemy

我有一个表,其中包含另一个表中的实体的许多修订(任务)。因此,每个TaskRevision行都有一个唯一的自动增量ID和对任务ID的引用。

如何找到所有任务的最新版本?我试过了:

session.query(TaskRevision.id).order_by(TaskRevision.task_id).filter(TaskRevision.id==func.max(TaskRevision.id)).all()

session.query(TaskRevision.id).group_by(TaskRevision.task_id, TaskRevision.id).having(TaskRevision.id==func.max(TaskRevision.id))

1 个答案:

答案 0 :(得分:1)

这有点令人讨厌,但取自this question

subq = session.query(TaskRevision.task_id, func.max(TaskRevision.id).label("max_id")) \
              .group_by(TaskRevision.task_id).subquery()
session.query(Task) \
       .join(subq, Task.id == subq.c.task_id) \
       .join(TaskRevision, TaskRevision.id == subq.c.max_id) \
       .with_entities(Task, TaskRevision)

如果你想要的只是身份证,你可以跳过第二步。

因为它有点烦人,我通常更喜欢在latest_task_revision_id上进行非规范化并保留Task列。