反正有没有在数据流中获取数据存储实体旧版urlsafe的信息?
我尝试了一些方法,但是都失败了……
直接编码
base64.urlsafe_b64encode(key.SerializeToString()).strip(b'=')
=>与appengine相比不一样
导入google.cloud.datastore.key
=>似乎与数据流datastoreio冲突?
从google.cloud.datastore复制_app_engine_key_pb2.py并像to_legacy_urlsafe()源代码一样使用它
elements = []
for part in key.path:
element_kwargs = {'type': part.kind}
if part.id:
element_kwargs['id'] = part.id
elif part.name:
element_kwargs['name'] = part.name
element = _app_engine_key_pb2.Path.Element(**element_kwargs)
elements.append(element)
legacy_path = _app_engine_key_pb2.Path(element=elements)
reference = _app_engine_key_pb2.Reference(
app=key.partition_id.project_id,
path=legacy_path,
name_space=key.partition_id.namespace_id
)
raw_bytes = reference.SerializeToString()
urlsafe = base64.urlsafe_b64encode(raw_bytes).strip(b'=')
=>与appengine相比还是不一样...
答案 0 :(得分:0)
ndb代码具有:
urlsafe = base64.b64encode(self.reference().Encode())
return urlsafe.rstrip('=').replace('+', '-').replace('/', '_')
因此,您应该获得与以下结果相同的结果:
urlsafe = base64.b64encode(key.SerializeToString())
return urlsafe.rstrip('=').replace('+', '-').replace('/', '_')
您正在使用ndb还是db库?您发现的to_legacy_urlsafe()函数似乎与数据库库匹配。