5

SQL Alchemy或Django默认基于关系数据库。因此,对该模型的任何更改都需要迁移工具,例如sqlalchemy-migrate或South。在Google应用引擎上更改模型的后果

现在切换到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) 

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

我的假设如下:

添加字段

  • 也许最简单的情况下,模型的唯一新实例将 验证对新领域。当加载任何较旧的实例时,该字段保持空白。但是,如果根据需要设置该字段为 ,会发生什么情况?

删除场

  • 在这种情况下,所有旧的情况下,将包含孤立的数据 删除的领域。但他们呆在那里,将从现在的 上忽略。

修改字段名称

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

这个假设是否正确?

回答

5

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

Google App Engine - Updating Your Model's Schema

然而,如果根据需要字段设置发生了什么?

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