如何在GAE中引入所需的财产 [英] How to introduce required property in 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屋!