如何从Protobuf中移除属性?
我想从一个已经创建的实体(entity_pb.EntityProto)中删除一个属性,创建方式如下:
pb = entity_pb.EntityProto()
prop1 = pb.add_property()
prop1.set_name('prop1')
prop2 = pb.add_property()
prop2.set_name('prop2')
假设我不想要prop1这个属性了。我该怎么做呢?
这个问题是关于想把protobuf(协议缓冲区)放进AppEngine的数据库,但现有的protobuf里有一个叫__scatter__
的属性,这个属性不能被存储。如果我尝试存储这个实体,就会出现这个错误:BadRequestError: cannot store entity with reserved property name '__scatter__'
2 个回答
0
在查看protobuf的文档时,发现里面没有关于如何处理单个EntityProtos的内容。而在entity_pb.py这个文件里的代码也没有相关的方法。所以我决定采取一种“直接操作这个对象,虽然其实不太应该这么做”的方式。
props = element.property_
for i in range(len(props)):
if props[i].name() == '__scatter__':
props.pop(i)
break
1
你可以对 pb.property_list()
的结果进行操作,所以这样做是可以的:
properties = pb.property_list()
properties[:] = [e for e in properties if e.name() != '__scatter__']