首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据迁移和AppEngine

数据迁移和AppEngine
EN

Stack Overflow用户
提问于 2011-08-01 05:22:50
回答 2查看 604关注 0票数 5

我在rails中做了很多开发工作,并且正在研究使用python和app引擎开发项目。

从演示项目和到目前为止我所看到的,我对应用程序引擎项目有一个问题/担忧:

app-engine是如何处理数据迁移的?例如,如果我更改了实体/表的名称(例如:Text为Documents),或者更改了现有表中的列(例如: age为道布)-当发生这种情况时,它如何处理旧数据?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-01 05:38:07

简短的答案是:它不能处理它。您不能更改实体的名称,您可以更改属性,但您必须手动更新数据。

您的模型定义只是您的应用程序如何解释存储在数据存储中的实体的“视图”。如果我有这样的定义:

代码语言:javascript
运行
复制
class MyEntity(db.Model):
    text = db.TextProperty()

并运行我的应用程序一段时间,填充我的enties的text属性,然后将该列重命名为:

代码语言:javascript
运行
复制
class MyEntity(db.Model):
    description = db.TextProperty()

我的所有现有数据都将完全保持原样(数据存储中的许多实体都填充了text属性。只有当我试图将实体加载到我的模型实例中时,我才会看到它们是空实体(没有设置description,并且无法访问当前存在的text数据)。将实体保存(放回)到数据存储中将覆盖旧数据,并且数据将丢失。

如果您像这样对架构进行更改,或者更可能只是更改字段类型。这将取决于您对数据进行预处理以处理这些更改。如果您尝试加载一个不再符合您的模型定义的实体,则模型层将引发错误。

为了帮助完成这项手动更新数据的任务,您可以选择以下武器:

  1. remote_api / mapreduce库(特别是“映射器”部分)

使用Python,您可以打开实时数据的交互式remote_api1会话,并在本地(主要)运行脚本,就像它们直接在生产服务器上运行一样。我发现对于较小的一次性任务,这是修复/清理数据的最快、最简单的方法。

如果您有一个更大的任务,比如修改数百万个实体,并且希望尽可能多地并行执行这些任务,则可以使用映射器api2。

票数 8
EN

Stack Overflow用户

发布于 2011-08-01 05:37:28

您不能更改实体的名称。这是不允许的。

如果您更改了模型中属性的名称(请不要将其称为列),AppEngine将忽略旧字段中的旧数据,并为新字段返回None。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6892408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档