代码之家  ›  专栏  ›  技术社区  ›  willem

在GoogleAppEngine中,当我更改与持久化对象相关的类时会发生什么?

  •  0
  • willem  · 技术社区  · 15 年前

    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        
    

    假设我已经在bigtable数据存储中持久化了这个类的实例。如果我向这个类添加一个字段,它会破坏反序列化吗?或者新的房产会一直空着吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Nick Johnson    15 年前

    模型实例不是使用标准序列化(如Pickle)存储的。属性(例如示例中的“version”)被编码并存储为协议缓冲区,当您从数据存储加载实体时,协议缓冲区被解码并用于构建新的模型实例。

    因此,您可以随意修改对象。添加新属性将使它们具有在添加之前存储的任何实体的默认值,或者在需要新属性且未提供默认值时引发错误。删除字段只会导致它们不再显示在模型实例上。

    然而,有一个警告:您不应该重写 初始化