エンティティ キーが実際のキーではなく文字列として格納されているアプリを継承したので、もちろん HRD データストアへの移行用の自動ツールによって更新されません。
文字列として保存されているキーを、新しいアプリ ID の新しいキーを表す文字列にプログラムで変換できますか (そうであれば、どのように) 変換できますか? (そもそも文字列として保存すべきではないという事実はさておき)。
エンティティ キーが実際のキーではなく文字列として格納されているアプリを継承したので、もちろん HRD データストアへの移行用の自動ツールによって更新されません。
文字列として保存されているキーを、新しいアプリ ID の新しいキーを表す文字列にプログラムで変換できますか (そうであれば、どのように) 変換できますか? (そもそも文字列として保存すべきではないという事実はさておき)。
ndb
:new_key = ndb.Key(urlsafe=string_value_of_key)
__app
アプリ ID を変更するには、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())
ありがたいことに、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)