- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 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)
最佳答案
好消息,您不必对持久化数据进行任何更改,因为 ext.db
和 ndb
读取和写入完全相同的数据。
这是来自 NDB Cheat Sheet 的引述:
No Datastore Changes Needed!
In case you wondered, despite the different APIs, NDB and the old ext.db package write exactly the same data to the Datastore. That means you don’t have to do any conversion to your datastore, and you can happily mix and match NDB and ext.db code, as long as the schema you use is equivalent. You can even convert between ext.db and NDB keys using ndb.Key.from_old_key() and key.to_old_key().
备忘单是转换模型定义的绝佳指南。例如,更改您的 MailMessageModel
应该很简单:
之前:
class MailMessage(db.Model):
m_text = db.TextProperty()
m_from = db.ReferenceProperty(reference_class=UserModel)
m_to = db.ReferenceProperty(reference_class=UserModel)
之后:
class MailMessage(ndb.Model):
m_text = ndb.TextProperty()
m_from = ndb.KeyProperty(kind=UserModel)
m_to = ndb.KeyProperty(kind=UserModel)
我强烈建议使用备忘单来帮助您进行迁移。
关于python - Appengine - 从标准数据库升级到导航台 - ReferenceProperties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14595163/
我是一名优秀的程序员,十分优秀!