如何在GAE中引入所需的财产 [英] How to introduce required property in GAE

查看:111
本文介绍了如何在GAE中引入所需的财产的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我会使用 mapreduce 库。

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

  mapreduce:
- name:修复所需的属性
mapper:
input_reader:mapreduce.input_readers.DatastoreInputReader
处理程序:您的处理程序
params:
- name:entity_kind
default:main。 ModelV2

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

  from mapreduce输入操作为op 
def process(实体):
如果不是实体.newproperty:
entity.newproperty = None
yield op.db.Put(entity)

如果您正在处理相对较少的实体,那么您可以避免使用mapreduce直接修改你的实体:

  entities = ModelV2.all()
for entity in实体:
如果不是entity.newproperty:
entity.newproperty = None
entity.put()


I've changed my object to have a new required property in v2. When I attempt to fetch a v1 object from the datastore, I get BadValueError because v1 doesn't have the required property. What's the best way to introduce new required properties on existing data

解决方案

I would resolve this problem using the mapreduce library.

First, register the mapper in mapreduce.yaml:

mapreduce:
- name: fixing required property
  mapper:
    input_reader: mapreduce.input_readers.DatastoreInputReader
    handler: your handler
    params:
    - name: entity_kind
      default: main.ModelV2

then define a process function to modify the entities:

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

If you are dealing with a relative small number of entities, you could avoid mapreduce modifying directly your entities with something like this:

entities = ModelV2.all()
for entity in entities :
  if not entity.newproperty :
    entity.newproperty = None
    entity.put()

这篇关于如何在GAE中引入所需的财产的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆