【问题标题】:db.model_from_protobuf() equivalents outside of AppEngine?AppEngine 之外的 db.model_from_protobuf() 等价物?
【发布时间】:2018-07-04 03:13:54
【问题描述】:

在 Google AppEngine(GAE) 环境中,我可以执行以下操作将 Protobuf 字节串转换回 Datastore 模型:

from google.appengine.ext import db

byte_str = ....
model = db.model_from_protobuf(byte_str.decode("base64"))

在 GAE 之外,我通常使用 google-cloud-datastore 客户端来访问 Datastore 模型:

from google.cloud import datastore

...
client = datastore.Client(project_id)
query = client.query(kind='Event', order=('-date',))
for result in query.fetch(limit=100):
    print result

# every result is of class `google.cloud.datastore.entity.Entity`

问题:如果我只得到编码的字节串怎么办?如何将其转换回google.cloud.datastore.entity.Entity(或dict)?


跟进:

更新1google.cloud.proto.datastore.v1.entity_pb2.Entity.ParseFromString() 是迄今为止我发现的最接近的。但还没有完全工作..

## fetched a protobuf into `pb`
>>> pb.__class__
<class 'google.cloud.proto.datastore.v1.entity_pb2.Entity'>

>>> entity = google.cloud.datastore.helpers.entity_from_protobuf(pb)
>>> entity.__class__
<class 'google.cloud.datastore.entity.Entity'>

>>> serialized = pb.SerializeToString()     ## <-- now this is the bytestring I meant.
>>> type(serialized)
<type 'str'>

>>> google.cloud.proto.datastore.v1.entity_pb2.Entity.ParseFromString(serialized)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: descriptor 'ParseFromString' requires a 'google.protobuf.pyext._message.CMessage' object but received a 'str'

>>>google.cloud.proto.datastore.v1.entity_pb2.Entity().ParseFromString(serialized)
76942    ## <--??

更新2

实际上不得不这样做:

e = google.cloud.proto.datastore.v1.entity_pb2.Entity()
e.ParseFromString(byte_str)
print e

就这么办了..

【问题讨论】:

  • 您应该将其添加为答案并接受它。

标签: google-app-engine google-cloud-platform google-cloud-datastore protocol-buffers google-compute-engine


【解决方案1】:

这行得通:

e = google.cloud.proto.datastore.v1.entity_pb2.Entity()
e.ParseFromString(byte_str)
print e

【讨论】:

    猜你喜欢
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多