google-app-engine - 在 Google 应用引擎上更改模型的后果

标签 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)

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

我的假设如下:

添加字段

  • 也许是最简单的情况,只有模型的新实例会被 针对新字段进行验证。加载任何旧实例时, 该字段只是空着。但是,如果该字段是 按要求设置?

删除字段

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

修改字段名

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

这个假设是否正确?

最佳答案

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

Google App Engine - Updating Your Model's Schema

However what happens if the field is set as required?

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

关于google-app-engine - 在 Google 应用引擎上更改模型的后果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17260605/

相关文章:

android - Google Apps 引擎后端 - 缺少 Javax.persistence - Android Studio

java - 当我没有捕获预期的异常类型时,为什么 IntelliJ 会显示编译错误?

google-app-engine - 如何从 Google App Engine (Python) NDB/Datastore 中的子实体查询父实体?

python - 如何使用ndb游标翻到上一页?

java - 在 Google App Engine (Java) 中使用祖先过滤器在事务中进行查询

python - 在本地 GAE 服务器上运行 flask 时出错 [Errno 13]

jquery - 使用 JQuery GAE Dropload 时出现问题 - 通过拖放上传 Blobstore

google-app-engine - 谷歌应用引擎中的数据库设计

python - ndb to_dict 方法不包括对象的键

python - 测试失败的 ndb 事务