我希望能够在ndb和googledatastore python library之间共享ndb.key.urlsafe()
个字符串
googledatastore.Key
字符串中的ndb.key.urlsafe()
? googledatastore.Key
构建urlsafe字符串的示例也很好我还制作了github issue
编辑:请注意,googledatastore具有SerializeToString()和FromString()但这是基于protobuff并且不接受ndb密钥字符串
答案 0 :(得分:1)
ndb.to_old_key()怎么样,这不正是你想要的?
https://developers.google.com/appengine/docs/python/ndb/keyclass#Key_urlsafe
答案 1 :(得分:1)
您可能需要自己做一些工作,因为Cloud Datastore和ndb以不同的格式进行通话。由于ndb' urlsafe
是它自己的函数(base64编码加上一些格式化的东西),我建议使用ndb来读取urlsafe格式,然后将其转换为Cloud Datastore密钥:
urlsafeKey = '....'
# First, let ndb deserialize the key.
ndbKey = ndb.Key(urlsafe=urlsafeKey)
# Rebuild the Cloud Datastore key using the path from ndb.
cloudKey = googledatastore.datastore_v1_pb2.Key()
for pair in ndbKey.pairs():
googledatastore.helper.add_key_path(cloudKey, pair[0], pair[1])
如果你想从googledatastore密钥转到ndb序列化密钥,你可以做同样的事情但反过来。
pairs = []
for path_element in cloudKey.path_elements:
if path_element.HasField('name'):
id_or_name = path_element.name
else:
id_or_name = path_element.id
pairs.append((path_element.kind, id_or_name))
ndbKey = ndb.Key(pairs=pairs)
免责声明:我实际上并没有运行代码,因此您可能需要稍微处理一下。
答案 2 :(得分:0)
我已经要求同事从appengine库中提取代码。结果如下:https://github.com/transceptor-technology/dbWrapper/blob/master/gcdKeyNdbKey.py
它公开了以下功能:
from gcdKeyNdbKey import gcdKeyFromUrlSafe
from gcdKeyNdbKey import urlSafeFromGcdKey