重新生成所有ComputedProperty字段

时间:2012-04-21 21:32:59

标签: python google-app-engine

我想将ComputedProperty字段添加到数据存储区中有许多现有实体的模型。

要查询此新ComputedProperty上的现有实体,我需要先生成计算属性。

触发计算并将计算值重新放回数据存储区的最有效方法是什么?

2 个答案:

答案 0 :(得分:0)

取决于您谈论的实体数量。使用MapReduce或仅使用远程API(启动控制台并手动执行)

答案 1 :(得分:0)

取决于您拥有多少数据。这是一个任务队列解决方案,但会耗尽您的配额......

class StampValue(webapp.RequestHandler):
    _task_url = '/tasks/stamp'
    _page_size = 100

    @classmethod
    def fire(cls, **params):
        taskqueue.add(url=cls._task_url, params=params)

    def get(self):
        self.fire()

    def post(self):
        key = self.request.get('key')
        if key:
            entities = MyModel.gql('WHERE __key__ >= :1 ORDER BY __key__ ASC', db.Key(key)).fetch(self._page_size+1)
        else:
            entities = MyModel.gql('ORDER BY __key__ ASC').fetch(self._page_size+1)

        key = None
        if len(entities) == self._page_size+1:
            key = str(entities[-1].key())
            self.fire(key=key)
            entities = entities[:self._page_size]

        for entity in entities:
            # update your field here
        db.put(entities)