Python 2.7 如何计算google数据存储列的总和

Python 2.7 如何计算google数据存储列的总和,python-2.7,google-app-engine,google-cloud-datastore,Python 2.7,Google App Engine,Google Cloud Datastore,我正在用WebApp2框架编写一个应用程序 我的数据库是 class SurveyFaculty(db.Model): name = db.StringProperty() clas = db.StringProperty() roll_no = db.IntegerProperty() semester = db.IntegerProperty() q11 = db.IntegerProperty() q12 = db.IntegerProperty() q13 = db.IntegerPro

我正在用WebApp2框架编写一个应用程序

我的数据库是

class SurveyFaculty(db.Model):
name = db.StringProperty()
clas = db.StringProperty()
roll_no = db.IntegerProperty()
semester = db.IntegerProperty()
q11 = db.IntegerProperty()
q12 = db.IntegerProperty()
q13 = db.IntegerProperty()
q14 = db.IntegerProperty()
q15 = db.IntegerProperty()
q21 = db.IntegerProperty()
q22 = db.IntegerProperty()
q23 = db.IntegerProperty()
q24 = db.IntegerProperty()
q25 = db.IntegerProperty()
q31 = db.IntegerProperty()
q32 = db.IntegerProperty()
q33 = db.IntegerProperty()
q34 = db.IntegerProperty()
q35 = db.IntegerProperty()
q41 = db.IntegerProperty()
q42 = db.IntegerProperty()
q43 = db.IntegerProperty()
q44 = db.IntegerProperty()
q45 = db.IntegerProperty()
q51 = db.IntegerProperty()
q52 = db.IntegerProperty()
q53 = db.IntegerProperty()
q54 = db.IntegerProperty()
q55 = db.IntegerProperty()
q61 = db.IntegerProperty()
q62 = db.IntegerProperty()
q63 = db.IntegerProperty()
q64 = db.IntegerProperty()
q65 = db.IntegerProperty()
q71 = db.IntegerProperty()
q72 = db.IntegerProperty()
q73 = db.IntegerProperty()
q74 = db.IntegerProperty()
q75 = db.IntegerProperty()
q81 = db.IntegerProperty()
q82 = db.IntegerProperty()
q83 = db.IntegerProperty()
q84 = db.IntegerProperty()
q85 = db.IntegerProperty()
q91 = db.IntegerProperty()
q92 = db.IntegerProperty()
q93 = db.IntegerProperty()
q94 = db.IntegerProperty()
q95 = db.IntegerProperty()
q101 = db.IntegerProperty()
q102 = db.IntegerProperty()
q103 = db.IntegerProperty()
q104 = db.IntegerProperty()
q105 = db.IntegerProperty()
q111 = db.IntegerProperty()
q112= db.IntegerProperty()
q113= db.IntegerProperty()
q114= db.IntegerProperty()
q115= db.IntegerProperty()
q121= db.IntegerProperty()
q122= db.IntegerProperty()
q123= db.IntegerProperty()
q124 = db.IntegerProperty()
q125 = db.IntegerProperty()
created = db.DateTimeProperty(auto_now_add = True)    
我想知道如果我也想得到一个特定列的加法(和),我应该写什么查询


如何计算数据库中每列的总和???

您不能。GAE数据存储不是关系数据库,不能进行求和


最好的办法是迭代并计算总和。

你不能。GAE数据存储不是关系数据库,不能进行求和


最好的办法是迭代并计算总和。

正如前面所说的,您根本不能

GAE数据存储是如何构建的,甚至不要考虑任何服务器端计算,它根本做不到。数据存储的速度和可伸缩性来自这样一个事实:它只对预先排序的表进行扫描(您在写入时会损失一点速度,但在读取时会获得惊人的数量)


因此,您可以选择为总计保留一个单独的实体,并在每次推送新数据时更新该实体(将“id=1”作为总计,在将id 1再次放入数据存储之前,在每个属性上获得id 1和do+=),或者使用mapreduce,如Daniel所述,你就是不能

GAE数据存储是如何构建的,甚至不要考虑任何服务器端计算,它根本做不到。数据存储的速度和可伸缩性来自这样一个事实:它只对预先排序的表进行扫描(您在写入时会损失一点速度,但在读取时会获得惊人的数量)


因此,您可以选择为总计保留一个单独的实体,并在推送新数据时更新该实体(将“id=1”作为总计,在将id 1再次放入数据存储之前,在每个属性上获取id 1和do+=),或者使用mapreduce,正如Daniel提到的,作为使用map reduce的替代方法,您可以预先计算所关心的属性的总和。特别是,您可以使用


这将使您能够高效地跟踪属性的总和,而无需运行任何作业来进行计算(除了可能需要初始映射reduce来填充现有数据的总和)。如果要写入大量需要更新计数器的实体,分片计数器的优点是可以进行缩放以防止争用。

作为使用map reduce的替代方法,您可以预先计算所关心的属性的总和。特别是,您可以使用

这将使您能够高效地跟踪属性的总和,而无需运行任何作业来进行计算(除了可能需要初始映射reduce来填充现有数据的总和)。切分计数器的优点是,如果您正在编写大量需要更新计数器的实体,它可以扩展以防止争用