2013-03-13 79 views
0

我想从一个实例entity_pb.EntityProto,以这种方式实例中删除属性如何从Protobuf中删除属性?

pb = entity_pb.EntityProto() 
prop1 = pb.add_property() 
prop1.set_name('prop1') 
prop2 = pb.add_property() 
prop2.set_name('prop2') 

假设我不想为prop1了。我怎样才能删除它?

此问题涉及到要将protobufs注入到AppEngine数据存储中,但不能放入具有__scatter__属性的现有protobufs。如果我试图放置该实体,则会返回此错误:BadRequestError: cannot store entity with reserved property name '__scatter__'

回答

1

你可以操纵的pb.property_list()的结果,所以这会工作:

properties = pb.property_list() 
properties[:] = [e for e in properties if e.name() != '__scatter__'] 
+0

+1的列表理解。 – 2013-03-13 21:24:13

0

看看protobuf documentation,在操纵单个EntityProtos时没有任何操作。 entity_pb.py中的代码也没有显示任何相关的方法,所以我使用“让我们直接操纵对象,即使你不是真的应该”。

props = element.property_ 
for i in range(len(props)): 
    if props[i].name() == '__scatter__': 
     props.pop(i) 
     break