如何从Protobuf中删除属性?
问题描述:
我想从一个实例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__'
答
你可以操纵的pb.property_list()
的结果,所以这会工作:
properties = pb.property_list()
properties[:] = [e for e in properties if e.name() != '__scatter__']
答
看看protobuf documentation,在操纵单个EntityProtos时没有任何操作。 entity_pb.py中的代码也没有显示任何相关的方法,所以我使用“让我们直接操纵对象,即使你不是真的应该”。
props = element.property_
for i in range(len(props)):
if props[i].name() == '__scatter__':
props.pop(i)
break
+1的列表理解。 – 2013-03-13 21:24:13