我们在应用A中有一些实体要移动到应用B.实体属于用户类型。我们不想移动所有用户实体,只需要移动一小部分,因此在一个应用中备份并在另一个应用中恢复将无法实现。
我能想到的一种方法是运行一个脚本将一个实体从一个应用程序复制到另一个应用程序,但我不知道如何处理密钥等。
我如何完全恢复它们,包括钥匙和参考等?
由于
答案 0 :(得分:1)
我认为您无法保留实体'因为在数据存储区的更高级别,每个应用程序都有自己的命名空间,应用程序ID在应用程序实体的所有键中反映/编码,因此在复制/移动不同的应用程序时,按键就像。
可以使用Key.app() API从实体密钥中获取应用ID。只有ID与实体密钥中编码的应用ID匹配的应用才能访问数据存储区中的该实体(否则恕我直言,GAE可能存在严重的安全问题)。
但是可以在应用程序之间传输数据,并让目标应用程序使用自己的密钥创建自己的对应实体。该脚本需要跟踪包含其他实体(也需要复制)的引用键或ID的实体,并相应地进行转换。这不是一件轻而易举的事。
答案 1 :(得分:0)
在数据存储区中创建实体时,您可以选择指定实体的密钥。例如,
如果您正在使用NDB数据存储模型,则可以使用' id'属性:
account = Account(username='Sandy', userid=1234, email='some@where.com', id='SOME@WHERE.COM')
account.put()
account.key.id() # returns 'SOME@WHERE.COM'
或
account = Account(username='Sandy', userid=1234, email='some@where.com')
account.key = ndb.Key('Account', 'SOME@WHERE.COM')
account.put()
以上例子来自于 https://cloud.google.com/appengine/docs/python/ndb/entities#creating_entities
如果您正在使用数据库数据存储模型,则使用' key_name'属性。例如:
employee = Employee(first_name='Antonio', last_name='Salieri', key_name='asalieri')
可在此处找到更多信息 - https://cloud.google.com/appengine/docs/python/datastore/entities#Python_Creating_an_entity
基本上,您的代码将从应用A'中检索数据。并将插入语句构造成应用程序B'使用上述方法之一。