如何在App Engine中使用GROUP BY
有没有办法在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。无论你选择哪种方式,都会返回查询中的所有行,但获取这些行的方法会有所不同。