str*_*go0 5 python google-app-engine data-migration ruby-on-rails-3
我在rails中做了很多开发,我正在研究使用python和app引擎开发项目.
从演示项目到目前为止我所看到的,我对app引擎项目有疑问/担忧:
如何在app-engine中处理数据迁移?例如,如果我更改实体/表的名称(例如:文本到文档),或更改现有表中的列(例如:age到dob) - 当发生这种情况时,它如何处理旧数据?
谢谢!
简短的回答是:它没有处理它.您无法更改实体的名称,您可以更改属性,但您必须手动更新数据.
您的模型定义只是您的应用程序"视图",了解如何解释存储在数据存储区中的实体.如果我的定义如下:
class MyEntity(db.Model):
text = db.TextProperty()
Run Code Online (Sandbox Code Playgroud)
并运行我的应用程序一段时间填充text
我的enties属性,然后将列重命名为:
class MyEntity(db.Model):
description = db.TextProperty()
Run Code Online (Sandbox Code Playgroud)
我现有的所有数据都将保持原样(数据存储区中的许多实体具有填充text
属性.只有当我尝试将实体加载到我的模型实例中时,我才会将它们视为空实体(没有description
设置,也没有办法访问text
当前存在的数据).然后将我的实体保存(放入)到数据存储区将覆盖旧数据,数据将丢失.
如果您对此架构进行此类更改,或者更有可能只更改字段类型.您可以自行预处理数据以处理更改.如果您尝试加载不再符合模型定义的实体,模型层将引发错误.
为了帮助完成更新数据的手动任务,选择的武器是:
使用remote_api [1]设置,您可以打开与实时数据交互的Python会话,并在本地(大多数情况下)运行脚本,就好像它们直接在生产服务器上运行一样.我发现这是修复/清理小型一次性任务数据的最快最简单的方法.
如果你有一个更大的任务映射器API [2]可以采用,比如改变数以百万计的实体,并想在尽可能平行做尽可能多的这种优势.