2

我继承了一个应用程序,该应用程序将实体键存储为字符串而不是实际键,因此它们当然不会被自动工具更新以迁移到 HRD 数据存储。

我可以以编程方式(如果可以,如何)将存储为字符串的键转换为代表新应用程序 ID 的新键的字符串?(撇开它们不应该首先存储为字符串的事实不谈)。

4

2 回答 2

2

如果您正在使用ndb

new_key = ndb.Key(urlsafe=string_value_of_key)

并更改应用程序 ID,您可以__app通过 public 属性访问受保护的属性_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())
于 2012-12-09T18:03:46.517 回答
1

幸运的是,有一种方法可以使用 Key Class。以下仅适用于没有父母的实体的键,但我相信这种方法可以推广到使用 Key 类的 parent() 方法的具有父母的实体。

您在 NEW 应用程序中运行此代码以获取新的密钥字符串:

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)
于 2012-12-09T18:08:20.347 回答