检查实体中是否存在字段

时间:2011-08-12 08:10:45

标签: python google-app-engine datastore

我已在Datastore中更新了我的模型,所以现在它有一个额外的字段。现在我有包含和没有该字段的实体,但我需要将此字段添加到尚未拥有它的所有实体。想法是在没有该字段的函数中获取实体并添加它。那么,我想知道如何在数据存储区请求中过滤这些实体?

2 个答案:

答案 0 :(得分:1)

可能不那么容易,但我想这是可能的。

您无法获得没有属性的实体:

  

不使用与缺少财产的实体匹配的过滤器

     

无法查询缺少给定属性的实体。另一种方法是创建一个默认值为None的固定(建模)属性,然后为 None 作为属性值的实体创建一个过滤器。

您可以对该特定属性进行所有过滤:

  

对属性进行过滤或排序需要该属性存在

     

如果属性具有查询过滤条件或排序顺序,则查询仅返回具有该属性值(包括null)的数据存储区实体。   一种实体不需要具有相同的属性。属性上的过滤器只能匹配具有该属性值的实体。如果实体对过滤器或排序顺序中使用的属性没有值,则从为查询构建的索引中省略该实体。

我的建议是从所有密钥中获取密钥,并使用具有该属性的实体的密钥减去列表。

参考: http://code.google.com/intl/en-US/appengine/docs/python/datastore/queries.html#Overview

答案 1 :(得分:1)

您无法过滤属性不存在。每个查询都必须通过索引来满足,并且没有缺少给定属性的实体的“负索引”。

通常,您需要遍历所有实体,并忽略已具有该属性的实体。