Google App Engine 如何从数据存储中计算总和?

6 投票
2 回答
3238 浏览
提问于 2025-04-15 21:53

我在想,我该怎么从数据存储中获取一个评分实体的总和呢(用Python)?

我应该这样做:

ratingsum = 0
for rating in ratings:
    ratingsum + rating

print ratingsum

2 个回答

0

我不能回答你关于Google App Engine的部分问题,不过你的代码(如果把+改成+=)其实是等价于:

ratingsum = sum(ratings)

我很确定你可以在任何包含数字类型对象的序列或可迭代对象上使用sum()这个函数。

12

没错,就是这样。你需要先把所有想要计算总和的东西找出来,然后在你的应用里进行相加。GQL里没有SUM这个功能。

如果你想要做的是找出某个实体的平均评分,其实有更好的方法。

class RateableThing(db.Model):
    num_ratings = db.IntegerProperty()
    avg_rating = db.FloatProperty()

找出这个东西的平均评分其实很简单,而添加一个新的评分只需要:

thing.avg_ratings = ((thing.avg_ratings * thing.num_ratings) + new_rating) / thing.num_ratings + 1
thing.num_ratings += 1
thing.put()

在App Engine的数据存储中,通常的做法是尽量在写入的时候做更多的工作,而在读取的时候尽量少做,因为读取的次数会远远多于写入。

撰写回答