2011-05-16 109 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