2011-05-16 68 views
3

假设我有一个这样的模型定义:如何更新模型

class Image(db.Model): 
    id = db.StringProperty() 
    url = db.URLProperty() 

现在我想一些字段添加到这个模型,使它看起来像这样:

class Image(db.Model): 
    id = db.StringProperty() 
    url = db.URLProperty() 
    width = db.IntegerProperty() 
    height = db.IntegerProperty() 

所以,这个新模型将适用于新添加的Image实体。但我也想更新已经存在的实体,以便它们包含这两个新字段并填充它们的值。一个已经存在的实体会自动获取这两个字段,所以当我引用它们时,它会给我空字段还是会导致错误?我想我将不得不创建一个帮助函数,它将遍历所有现有的实体并设置新的字段值,对吗?那么,我应该记住什么以及如何更好地进行此型号更新?我认为它会在应用程序出现时有时发生,所以我认为有一些简单的流程可以实现这一点。

+0

我写了一个博客帖子几年前,可以帮助你:http://kupuguy.blogspot.com/2008/05/migrating-models.html – Duncan 2011-05-16 09:52:57

回答

3

这个确切场景在GAE文档(文章部分)覆盖:

Updating your model's schema.

基本上只是改变模型d定义和你一样,然后执行一些操作为所有现存实体提供默认值。第二部分有几种方法 - 文章描述了一种方法。

+0

谢谢,涵盖了我需要的东西。 – 2011-05-17 07:09:32

2

任何已存在的实体都不会自动获得这两个字段,也不会将其假设为无。在现有对象中访问这些字段时将导致错误。现在唯一可用的解决方案是使用remote_apy并编写自己的脚本来更新现有记录。这不会是什么大问题,编写一个脚本来获得在数据存储,并为新的属性设置一些默认值的所有记录..

  1. Setting_Up_remote_api
  2. Update_schema
+0

@Wooble这就是我的意思...... – 2011-05-16 13:12:36