2009-02-28 40 views
22

我在Google App Engine数据存储中为我的db模型创建了一个新属性。AppEngine:查询数据存储<missing>的值记录

老:

class Logo(db.Model): 
    name = db.StringProperty() 
    image = db.BlobProperty() 

新:

class Logo(db.Model): 
    name = db.StringProperty() 
    image = db.BlobProperty() 
    is_approved = db.BooleanProperty(default=False) 

如何查询为标志的记录,其中没有 'is_approved' 值设置? 我试过

logos.filter("is_approved = ", None) 

但它没有工作。 在数据查看器中,新字段值显示为。

回答

33

据对Queries and Indexes的App Engine文档,还有就是有没有为属性的实体之间的区别,以及那些有价值为它;和“没有筛选属性的实体永远不会被查询返回”。因此无法为这些旧记录编写查询。

一篇有用的文章是Updating Your Model's Schema,其中说目前唯一支持的方式来查找缺少某些属性的实体是检查所有这些属性。该文章提供了示例代码,演示如何在大量实体中循环并更新它们。

+4

Google的Marzia已确认无法查询缺失值。 – gravitation 2009-03-01 01:45:05

2

也许这已改变,但我可以根据null字段筛选记录。

当我尝试GQL查询SELECT * FROM Contact WHERE demo=NULL时,它只返回缺少演示字段的记录。

根据该文档http://code.google.com/appengine/docs/python/datastore/gqlreference.html

一个比较的右手侧可以是(适合作为 的属性的数据类型)以下中的一种:[...]布尔文字,为TRUE或 错误;表示空值的文字( Python中的无)。

我不知道该“空”相同“失踪”虽然:在我的情况下,这些领域已经存在在我的模型,但没有填充的创作。也许Federico你可以让我们知道,如果NULL查询适用于你的具体情况?

+2

如果实体创建时它是您模型的一部分,则该字段不会丢失。它在创建时填充,即使它填充了“无”或空字符串。 – geoffspear 2011-12-22 14:06:30

相关问题