AppEngine:查询带有<missing>值的记录的数据存储

2024-04-26 02:34:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Google App Engine数据存储中为我的db模型创建了一个新属性。

旧的:

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)

如何查询没有设置“是否已审核”值的徽标记录? 我试过了

logos.filter("is_approved = ", None)

但没用。 在数据查看器中,新字段值显示为。


Tags: 数据name模型imageappdbmodelis
2条回答

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

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

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

The right-hand side of a comparison can be one of the following (as appropriate for the property's data type): [...] a Boolean literal, as TRUE or FALSE; the NULL literal, which represents the null value (None in Python).

我不确定“null”是否与“missing”相同:在我的例子中,这些字段已经存在于我的模型中,但在创建时没有填充。也许Federico你可以告诉我们空查询在你的特定情况下是否有效?

根据Queries and Indexes上的App Engine文档,属性值为no的实体与属性值为null的实体之间存在区别;并且“没有筛选属性的实体永远不会被查询返回”。因此无法为这些旧记录编写查询。

一篇有用的文章是Updating Your Model's Schema,它指出,当前唯一支持的查找缺少某些属性的实体的方法是检查所有这些实体。本文的示例代码展示了如何遍历一组大型实体并更新它们。

相关问题 更多 >