如何在App Engine中使用GROUP BY

3 投票
3 回答
3872 浏览
提问于 2025-04-17 12:37

有没有办法在App Engine中使用GQL或者Query方法进行GROUP BY操作呢?

我查了一下,发现GQL里没有GROUP BY这个功能,看起来Query类里也没有。

如果有关于如何用Python实现这个功能的资料或者方法,请告诉我。


编辑

我还了解到,可以通过Map Reduce来实现GROUP BY。如果有人有这方面的经验,欢迎提供帮助。

谢谢。

3 个回答

1

我想解决方案最终还是要看你打算怎么使用这些分组的数据。如果你分组的目的是为了让HTML代码的输出更简单,那你可以通过在模板中重新分组来实现。

如果是要进行计算或者其他类型的汇总,那就需要在内存中处理这些数据。

2

你不能使用 appengine 库来执行 GROUP BY 查询。这是 NoSQL 数据库架构的一个缺陷(谷歌的 BigTable 就是其中一种实现)。

根据你想用 GROUP BY 做的事情,可能有其他方法更适合你。如果你要查询的每种“类型”的模型,可以为每种类型创建一个 db.Model 类来表示它们。然后直接查询这些类。

另外,如果你事先知道要返回的分组值,你可以使用 Query#filter() 来查询这些值,把这些查询当作你的 GROUP BY 集合。

4

不,数据存储系统不支持在数据库端进行任何处理或汇总。解决办法是把所有后续处理放在内存中进行。你可以选择两种方式来实现:一种是在每次请求时处理,另一种是使用MapReduce。无论你选择哪种方式,都会返回查询中的所有行,但获取这些行的方法会有所不同。

撰写回答