Python 如何从Protobuf中删除属性?
我想从实例化的实体\u pb.EntityProto中删除一个属性,实例化方式如下:Python 如何从Protobuf中删除属性?,python,google-app-engine,protocol-buffers,Python,Google App Engine,Protocol Buffers,我想从实例化的实体\u pb.EntityProto中删除一个属性,实例化方式如下: pb = entity_pb.EntityProto() prop1 = pb.add_property() prop1.set_name('prop1') prop2 = pb.add_property() prop2.set_name('prop2') 假设我不再需要prop1了。我怎样才能删除它 这个问题与希望将protobufs注入AppEngine数据存储有关,但无法放置具有\uuuu scatte
pb = entity_pb.EntityProto()
prop1 = pb.add_property()
prop1.set_name('prop1')
prop2 = pb.add_property()
prop2.set_name('prop2')
假设我不再需要prop1了。我怎样才能删除它
这个问题与希望将protobufs注入AppEngine数据存储有关,但无法放置具有\uuuu scatter\uuuu
属性的现有protobufs。如果我尝试放置实体,它会返回以下错误:BadRequestError:无法使用保留属性名“\uuuuu scatter\uuuuuuuu”存储实体。
查看,没有任何关于操作单个EntityProtos的内容。entity_pb.py中的代码也没有显示任何相关的方法,因此我采用了“让我们直接操作对象,尽管您实际上不应该这样做”的方法
props = element.property_
for i in range(len(props)):
if props[i].name() == '__scatter__':
props.pop(i)
break
您可以操纵pb.property_list()的结果,这样可以:
properties = pb.property_list()
properties[:] = [e for e in properties if e.name() != '__scatter__']