我想检查db.Model是否已更改。怎么做?
一年前的一些例子我设计了这样的模型并保存了:
class DeleteMe(db.Model):
a = db.StringProperty()
key = db.Key().from_path('DeleteMe', 'a')
a = DeleteMe(key = key)
年后我添加了一些新的默认属性:
class DeleteMe(db.Model):
a = db.StringProperty(default = 'zero')
b = db.StringProperty(default = 'cat')
key = db.Key().from_path('DeleteMe', 'a')
a = DeleteMe.get(key)
当我正在阅读模型a == None
和b == cat
时,但在数据存储b == None
中,如何检查数据存储区中是否b == None
?
我使用了未记录的ea = a._entity.get('b')
来检查ea != a.a
是什么是替代记录方法。
答案 0 :(得分:1)
您无法正常使用db或ndb检查if b == None
。
你所建议的可能是最好的方法。正如您所发现的那样,底层原始实体甚至没有b
属性,因此默认值会启动。此外,您也无法查询索引。
通常在处理架构迁移时,您必须访问每个实体并进行更新。
在某些情况下,您可以懒惰地执行此操作(即,只有在您下次获取实体时才更新),然后您的方法将用于建立b
的实际值或不存在以及实体是否需要更新。
您可以在实体中使用版本属性来帮助管理复杂的架构更新。
如果定义了版本属性,那么b == "cat"
是否重要,因为您将知道是否需要根据实体架构的版本回写/更新对象。