SQLAlchemy 在 Group By 前排序

2 投票
1 回答
2042 浏览
提问于 2025-04-17 22:45

我在研究如何在执行group by之前进行order by的查询时,发现大多数答案都是关于原始SQL的。不过,我想看看用SQLAlchemy代码来解决这个问题。

  1. 我最初的简单解决方案是这样的:

    session.query(MyTable).order_by(timestamp).group_by(begin_date)
    

    可惜的是,这样做会先对表进行分组,然后再排序,这样的结果并不是我想要的。

  2. 接下来,我尝试了:

     stmt = session.query(MyTable).order_by(timestamp)
     session.query(stmt).group_by(begin_date)
    

    这个方法返回了正确的结果,但结果是KeyedTuples,而我其实想要的是MyTable对象,以便保持向后兼容。

我该如何实现这个目标呢?

1 个回答

2

原问题最新评论中的代码似乎还有一些问题。这里有一个可以正常运行的版本:

stmt = session.query(MyTable).order_by(timestamp).subquery()
session.query().add_entity(MyTable, alias=stmt).group_by(begin_date);

撰写回答