0

我想从实例化的 entity_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 数据存储区有关,但__scatter__不能放入具有该属性的现有 protobufs。如果我尝试放置实体,它会返回此错误:BadRequestError: cannot store entity with reserved property name '__scatter__'

4

2 回答 2

1

您可以操纵 的结果pb.property_list(),因此这将起作用:

 properties = pb.property_list()
 properties[:] = [e for e in properties if e.name() != '__scatter__']
于 2013-03-13T19:46:53.930 回答
0

查看protobuf 文档,没有任何关于操作单个 EntityProtos 的内容。entity_pb.py 中的代码也没有显示任何相关的方法,所以我采用了“让我们直接操作对象,即使你不应该这样做”的方法。

props = element.property_
for i in range(len(props)):
    if props[i].name() == '__scatter__':
        props.pop(i)
        break
于 2013-03-13T19:19:22.890 回答