对App Engine上的数据库中的所有浮动实体求和

时间:2012-12-06 05:36:46

标签: python google-app-engine

我只是想知道这样做的正确方法是什么。我有一个包含浮点数的数据库,我只是想获取数据库中所有浮点数的总和。

示例:

class Sum_DB(db.Model):
    name_of_profile = db.StringProperty(required = True)
    float_value= db.FloatProperty()


sum_me_up  = db.GqlQuery("select * from Sum_DB WHERE name_of_profile =:1", profile_id)

如果有人可以帮我一把,我将不胜感激。我已经尝试过使用fetch(),但是无法获得值或值列表。

2 个答案:

答案 0 :(得分:2)

很抱歉,如果我误解了,但听起来您想要从数据存储中检索一组实体并汇总各自的float_value属性。如果这是你想要做的,你将需要设置一个查询来拉出所有有问题的实体(这里我们将只使用Sum_DB.all()拉出所有这些实体),然后遍历返回的列表对象,总结他们的float_value属性。例如:

class Sum_DB(db.Model):
    name_of_profile = db.StringProperty(required = True)
    float_value= db.FloatProperty()


class MainHandler(webapp2.RequestHandler):
  def get(self, *args, **kwargs):
    r = Sum_DB(name_of_profile='test1', float_value=float(1.2359))
    s = Sum_DB(name_of_profile='test2', float_value=float(2.2355))
    t = Sum_DB(name_of_profile='test3', float_value=float(4.2185))

    r.put()
    s.put()
    t.put()

    # Using the Query class
    query = Sum_DB.all()

    # You can now iterate over that 'query', with each element
    # representing an entity from your datastore. Each entity
    # will have the properties you defined in Sum_DB, so you 
    # can access them by name.
    sum_me_up = sum(result.float_value for result in query)

    # Or using GQL - the concept/result is the same
    query2 = db.GqlQuery('SELECT * from Sum_DB')
    sum_me_up2 = sum(result.float_value for result in query2)

    self.response.out.write('Query: {0} | GQL: {1}'.format(sum_me_up,
                                                           sum_me_up2))


app = webapp2.WSGIApplication([
                   ('/', MainHandler),
                   ],
                   debug=True)

答案 1 :(得分:0)

mapreduce管道可以轻松地对任意大型实体求和: https://developers.google.com/appengine/docs/python/dataprocessing/overview

你只需编写一个mapper来总结你想要的东西。