2009-11-25 17 views
0

我的模型類如下所示:在Google App Engine中,當我更改與持久對象相關的類時會發生什麼?

from google.appengine.ext import db 
class SnapShotBase(db.Model): 
    ''' 
    The base class from which all entity snapshots will inherit. 
    ''' 
    version = db.IntegerProperty() 

    def __init__(self): 
     pass   

想象我已經在我的大表格數據存儲堅持這個類的實例。如果我要爲這個類添加一個字段,它是否會打破反序列化?或者新的房產會保持空置?

回答

3

模型實例使用標準串行化不存儲諸如泡菜。這些屬性(如您的示例中的'版本')被編碼並存儲爲協議緩衝區,並且當您從數據存儲區加載實體時,協議緩衝區將被解碼並用於構建新的Model實例。

其結果是,你可以修改你的對象,只要你喜歡。添加新屬性將導致它們對於在添加之前存儲的任何實體具有其默認值,或者如果新屬性是必需的並且未提供默認值,則會引發錯誤。刪除字段只會導致它們不再顯示在您的模型實例上。

但是有一個警告:你不應該在模型類中重寫init,就像你在上面做的那樣。這樣做可能會破壞數據存儲中實體的構建。如果你需要修改構造行爲,我建議使用工廠方法(或函數)。

+0

偉大的建議,謝謝尼克! – willem 2009-11-26 07:36:22

相關問題