Python3 NDB中如何将新Key转旧版?to_old_key方法用法咨询
问题描述
我用Python3 NDB编写了以下代码获取Key:
new_key = ndb.Key(urlsafe = request.user_key)
之后将其转换为urlsafe格式:
key = new_key.urlsafe() key.decode(encoding="utf-8")
但转换后的Key和Python2环境下生成的Key不匹配。官方提供了to_old_key方法来兼容旧版,但我不知道该如何正确使用它实现Key的转换。
解决方案
要生成和Python2 NDB一致的urlsafe Key,需要通过to_old_key()先将Python3 NDB的Key转换为兼容旧版的Key对象,再调用旧版Key的urlsafe()方法,具体步骤如下:
- 获取Python3 NDB的Key对象(即你代码中的
new_key) - 调用
to_old_key()方法得到旧版Key实例 - 对旧版Key调用
urlsafe(),直接得到与Python2环境一致的字符串格式Key
完整代码示例:
# 从urlsafe字符串初始化Python3 NDB Key new_key = ndb.Key(urlsafe=request.user_key) # 转换为兼容Python2的旧版Key old_key = new_key.to_old_key() # 生成和Python2一致的urlsafe Key字符串 compatible_urlsafe_key = old_key.urlsafe()
说明
- Python3 NDB的
Key.urlsafe()返回的是bytes类型,解码后是新版格式的字符串,和Python2的格式不兼容 to_old_key()返回的是旧版NDB的Key对象,它的urlsafe()方法直接返回字符串,格式与Python2环境生成的完全一致
内容的提问来源于stack exchange,提问作者Jaskaran Singh
相关产品推荐
相关产品推荐

