如何检查db.Model是否已更改?

时间:2014-05-13 16:01:15

标签: google-app-engine google-cloud-datastore

我想检查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 == Noneb == cat时,但在数据存储b == None中,如何检查数据存储区中是否b == None

我使用了未记录的ea = a._entity.get('b')来检查ea != a.a是什么是替代记录方法。

1 个答案:

答案 0 :(得分:1)

您无法正常使用db或ndb检查if b == None

你所建议的可能是最好的方法。正如您所发现的那样,底层原始实体甚至没有b属性,因此默认值会启动。此外,您也无法查询索引。

通常在处理架构迁移时,您必须访问每个实体并进行更新。

在某些情况下,您可以懒惰地执行此操作(即,只有在您下次获取实体时才更新),然后您的方法将用于建立b的实际值或不存在以及实体是否需要更新。

您可以在实体中使用版本属性来帮助管理复杂的架构更新。

如果定义了版本属性,那么b == "cat"是否重要,因为您将知道是否需要根据实体架构的版本回写/更新对象。