Python 2.7 计算所有子项中变量的和(递归)

Python 2.7 计算所有子项中变量的和(递归),python-2.7,google-app-engine,google-cloud-datastore,app-engine-ndb,Python 2.7,Google App Engine,Google Cloud Datastore,App Engine Ndb,我有一个模型如下: class SomeModel(ndb.Model): parent = ndb.KeyProperty() someint = ndb.IntegerProperty(default = 2) sum_of_child_some_int = ndb.IntegerProperty() parent属性要么是nothing(对于顶级父级),要么是指向另一个SomeModel实体的键 我的问题是,计算一个SomeModel父对象的所有子对象的someint之和的最

我有一个模型如下:

class SomeModel(ndb.Model):
  parent = ndb.KeyProperty()
  someint = ndb.IntegerProperty(default = 2)
  sum_of_child_some_int = ndb.IntegerProperty()
parent属性要么是nothing(对于顶级父级),要么是指向另一个SomeModel实体的键

我的问题是,计算一个SomeModel父对象的所有子对象的someint之和的最有效方法是什么?它是递归的,因此子对象本身可以有一个子对象,someint也需要计算


我发现它可以在写入时完成——只需递归地写入实体。但是,这可以在读取时完成,还是总是太昂贵?

如果不想在写入时输入该数字,可以使用祖先查询获取给定实体的所有子级,并提取someint属性。如果你打算这样做,我认为最有效的方法是使用

请记住,如果在放置实体时不写入该和,则每次请求时都必须进行求和(尽管可能会得到缓存结果),这听起来有点浪费。内存很便宜,在写入时添加另一个更新的属性对我来说似乎是最好的主意


顺便说一句,也许您不需要将父对象作为KeyProperty,使用一个可能是更好的方法。

如果您不想在写入时输入该数字,您可以使用祖先查询来获取给定实体的所有子对象,并提取someint属性。如果你打算这样做,我认为最有效的方法是使用

请记住,如果在放置实体时不写入该和,则每次请求时都必须进行求和(尽管可能会得到缓存结果),这听起来有点浪费。内存很便宜,在写入时添加另一个更新的属性对我来说似乎是最好的主意

顺便说一句,也许您不需要将父对象作为KeyProperty,一个可能是更好的方法