Google app engine 如何检查db.Model是否更改?

Google app engine 如何检查db.Model是否更改?,google-app-engine,google-cloud-datastore,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

我想检查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
什么是交替记录方法。

如果b==None使用db或ndb,则通常无法检查

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

通常,在处理模式迁移时,您必须访问每个实体并对其进行更新

在某些情况下,您可以延迟执行此操作(即仅在下次获取实体时更新),然后使用您的方法确定
b
的实际值或不存在,以及实体是否需要更新

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


定义了version属性后,如果
b==“cat”
,则无关紧要,因为您将知道是否需要基于实体架构的版本写回/更新对象

您应该检查此建议: