Ale*_*rdt 7 python database google-app-engine datastore
我有一个AppEngine应用程序,我正在考虑升级以使用NDB数据库.
在我的应用程序中,我有数百万个具有旧式数据库引用的对象.我想知道将这些ReferenceProperty值转换为KeyProperty值的最佳迁移路径,或任何其他允许我升级到NDB的解决方案.
(我希望有一些不涉及数据库中所有元素的大规模批处理并基于ReferenceProperty计算KeyProperty的东西 - 优雅的东西会很好)
我想从db.Model升级到ndb.Model的模型示例如下:
class UserModel(db.Model):
....
class MailMessageModel(db.Model):
m_text = db.TextProperty()
m_from = db.ReferenceProperty(reference_class = UserModel)
m_to = db.ReferenceProperty(reference_class = UserModel)
Run Code Online (Sandbox Code Playgroud)
Sea*_*nch 12
好消息,你不必让您持久数据的任何变化,ext.db以及ndb读取和写入数据完全相同.
以下是NDB备忘单的引用:
无需更改数据存储!
如果您想知道,尽管有不同的API,NDB和旧的ext.db软件包会将完全相同的数据写入数据存储区.这意味着您不必对数据存储区进行任何转换,只要您使用的架构是等效的,您就可以愉快地混合和匹配NDB和ext.db代码.您甚至可以使用ndb.Key.from_old_key()和key.to_old_key()在ext.db和NDB密钥之间进行转换.
备忘单是转换模型定义的绝佳指南.例如,更改您MailMessageModel应该像以下一样简单:
之前:
class MailMessage(db.Model):
m_text = db.TextProperty()
m_from = db.ReferenceProperty(reference_class=UserModel)
m_to = db.ReferenceProperty(reference_class=UserModel)
Run Code Online (Sandbox Code Playgroud)
后:
class MailMessage(ndb.Model):
m_text = ndb.TextProperty()
m_from = ndb.KeyProperty(kind=UserModel)
m_to = ndb.KeyProperty(kind=UserModel)
Run Code Online (Sandbox Code Playgroud)
我强烈建议您使用备忘单来帮助您进行迁移.