数据迁移和AppEngin

2024-03-02 20:28:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

从演示项目和我目前看到的情况来看,我有一个关于app engine项目的问题/担忧:

app engine中如何处理数据迁移?例如,如果我更改一个实体/表的名称(例如:将文本更改为文档),或更改现有表中的列(例如:将age更改为dob)-发生这种情况时,它如何处理旧数据?在

谢谢!在


Tags: 数据项目文档文本实体名称appage
2条回答

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

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

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

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

class MyEntity(db.Model):
    text = db.TextProperty()

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

^{pr2}$

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

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

为了帮助完成更新数据的手动任务,可选择的武器有:

  1. 远程api/remote_api_shell.py
  2. mapreduce库(尤其是“映射器”部分)

使用remote_api[1]设置,您可以打开一个交互式Python会话来访问您的实时数据,并在本地(大多数情况下)运行脚本,就像它们直接在生产服务器上运行一样。我发现这是修复/清理小型一次性任务数据的最快、最简单的方法。在

如果您有一个更大的任务,比如修改数百万个实体,并且希望尽可能多地并行执行这些任务,那么就可以使用mapperapi[2]。在

相关问题 更多 >