如何在GAE中引入所需的财产

Bri*_*rig 5 google-app-engine

我已将我的对象更改为在v2中具有新的必需属性.当我尝试从数据存储区中获取v1对象时,我得到BadValueError,因为v1没有必需的属性.在现有数据上引入新的必需属性的最佳方法是什么

sys*_*out 6

我会使用mapreduce库来解决这个问题.

首先,将映射器注册到mapreduce.yaml:

mapreduce:
- name: fixing required property
  mapper:
    input_reader: mapreduce.input_readers.DatastoreInputReader
    handler: your handler
    params:
    - name: entity_kind
      default: main.ModelV2
Run Code Online (Sandbox Code Playgroud)

然后定义一个process修改实体的函数:

from mapreduce import operation as op
def process(entity):
 if not entity.newproperty :
    entity.newproperty = None
 yield op.db.Put(entity)
Run Code Online (Sandbox Code Playgroud)

如果您正在处理相对较少数量的实体,则可以避免mapreduce直接修改您的实体,如下所示:

entities = ModelV2.all()
for entity in entities :
  if not entity.newproperty :
    entity.newproperty = None
    entity.put()
Run Code Online (Sandbox Code Playgroud)