我继承了一个应用程序,它将实体密钥存储为字符串而不是实际密钥,因此当然它们不会被自动工具更新以迁移到HRD数据存储区。
我可以通过编程方式(如果是这样,如何)将存储为字符串的密钥转换为表示新应用程序ID的新密钥的字符串吗? (撇开它们不应该首先存储为字符串的事实。)
答案 0 :(得分:2)
ndb
:new_key = ndb.Key(urlsafe=string_value_of_key)
要更改应用ID,您可以通过公开属性__app
_Key__app
new_key._Key__app = 'new-app-id'
db
:old_key = db.Key(encoded=string_value_of_key)
然后,要将密钥转换为具有新应用ID的密钥,您可以使用
new_key = db.Key.from_path(*old_key.to_path(),
_app='new-app-id',
parent=old_key.parent(),
namespace=old_key.namespace())
答案 1 :(得分:1)
谢天谢地,使用Key Class。以下仅适用于没有父母的实体的密钥,但我相信这种方法可以推广给父母使用Key类的parent()方法的实体。
您在新应用中运行此代码以获取新的密钥字符串:
old_key = db.Key('old_key_string_in_here')
new_key = db.Key.from_path(old_key.kind(), old_key.id())
new_key_string = str(new_key)