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

Hou*_*man 5 google-app-engine app-engine-ndb google-cloud-datastore

默认情况下,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)
Run Code Online (Sandbox Code Playgroud)

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

我的假设如下:

添加字段

  • 也许是最简单的情况,只有新模型的新实例才会针对新字段进行验证.加载任何旧实例时,该字段只保持为空.但是,如果字段设置为必需,会发生什么?

删除字段

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

修改字段名称

  • 以上两者的组合; 新名称将被视为新字段,旧字段将被忽略和孤立.

这个假设是否正确?

Dal*_*mas 5

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

Google App Engine - 更新模型的架构

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

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