我试图查询谷歌应用程序引擎记录,其中一个IntegerProperty为空(无)。这是我尝试没有成功:

data = db.GqlQuery("SELECT * FROM MyModel WHERE intProp=:1",None)

和还与查询:

query = db.Query(MyModel)
query = query.filter('intProp', None) 
data = query.fetch(limit=100)

任何帮助,将不胜感激。

class MyModel(db.Model):
    intProp = db.IntegerProperty()
有帮助吗?

解决方案

您的代码看起来是正确的。你真的有MyModel的任何实例与intPropNone ...?

修改:每OP的评论很显然模式迁移的问题;他增加了一个新的属性和预期现有实体让它出现(设置为无)。这不是如何GAE的工作模式的变化,每的文档

  

在应用程序引擎数据存储区不   要求所有实体具有相同   设置的属性。更新后您的   车型增加新的特性,现有的   实体将继续存在   没有这些属性。在一些   的情况下,这是很好,你   不需要做任何更多的工作。什么时候   你会想回去和更新   现有的实体,使他们也有   新的特性?一种情况   会当你想要做一个查询   根据新的属性。在我们的   例如与图片,查询,如   “最流行的”或“最热门”   不会返回现有图片,   因为他们没有(还)有   收视率的特性。为了解决这个问题,我们将   需要更新现有实体   在数据存储中。

我引用的文章继续通过展示如何做这件事,但它是一个很老套的方法,从之前GAE已安排的任务,远程的API,&C。我们可以做的更好了。 App Engine的风机具有非常最近帖子昭示着一般的方法(和错误,他自己的架构迁移过程中提出,让别人能够避免的话!),并指向的远程API 作为关键工具;他还指出,的模块(从特维德开源核心审查项目,由Guido van Rossum的,Python和App Engine中的发展作出重要贡献的作者开始),其整齐,适当地做任务(你需要调整该代码一点,所以它使用你的模型&C而不是特维德的,当然)。

其他提示

我管理使用特技这样来查询实体NULL值:

SELECT * FROM为MyModel WHERE intProp <0

自然没有GARANTIE这种nondocumented方法将是与将来的版本兼容。

scroll top