在Google应用引擎上更改模型的后果

时间:2013-06-23 12:08:25

标签: google-app-engine google-cloud-datastore app-engine-ndb

默认情况下,SQL Alchemy或Django基于关系数据库。因此,对模型的任何更改都需要迁移工具,例如sqlalchemy-migrate或South。

现在切换到Google App引擎并使用ndb,如果我更改模型会发生什么?从理论上讲,像Big-Table这样的NoSQL数据库不应该关心进化模式,因此不需要迁移。

然而,定义诸如此类的模型,清楚地表明要验证的模式。

class ExampleModel(ndb.Model):
    example_name = ndb.StringProperty(required=True)
    example_description = ndb.TextProperty(required=True)
    added_by = ndb.UserProperty()
    timestamp = ndb.DateTimeProperty(auto_now_add=True)

那么如果添加一个字段会发生什么?改变了一个字段甚至删除了一个字段?

我的假设如下:

添加字段

  • 也许最简单的情况,只有模型的新实例 针对新领域进行了验证。加载任何旧实例时, 该领域仍然是空的。但是如果该字段是什么会发生什么 根据需要设置?

删除字段

  • 在这种情况下,所有旧实例都将包含孤立数据 删除的字段。但他们留在那里,现在将被忽视 上。

修改字段名称

  • 上述两者的组合;新名称将被视为一个 新字段和旧字段将被忽略和孤立。

这个假设是否正确?

1 个答案:

答案 0 :(得分:5)

您可以在文档中找到许多问题的答案:

Google App Engine - Updating Your Model's Schema

  

但是,如果字段设置为必需,会发生什么?

仅根据需要设置属性意味着您必须直接在构造函数中设置值,因此现有实体不会受到影响。