题
我试图查询谷歌应用程序引擎记录,其中一个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
的任何实例与intProp
的None
...?
修改:每OP的评论很显然模式迁移的问题;他增加了一个新的属性和预期现有实体让它出现(设置为无)。这不是如何GAE的工作模式的变化,每的文档:
在应用程序引擎数据存储区不 要求所有实体具有相同 设置的属性。更新后您的 车型增加新的特性,现有的 实体将继续存在 没有这些属性。在一些 的情况下,这是很好,你 不需要做任何更多的工作。什么时候 你会想回去和更新 现有的实体,使他们也有 新的特性?一种情况 会当你想要做一个查询 根据新的属性。在我们的 例如与图片,查询,如 “最流行的”或“最热门” 不会返回现有图片, 因为他们没有(还)有 收视率的特性。为了解决这个问题,我们将 需要更新现有实体 在数据存储中。
我引用的文章继续通过展示如何做这件事,但它是一个很老套的方法,从之前GAE已安排的任务,远程的API,&C。我们可以做的更好了。 App Engine的风机具有非常最近帖子昭示着一般的方法(和错误,他自己的架构迁移过程中提出,让别人能够避免的话!),并指向的远程API 作为关键工具;他还指出,的模块一>(从特维德开源核心审查项目,由Guido van Rossum的,Python和App Engine中的发展作出重要贡献的作者开始),其整齐,适当地做任务(你需要调整该代码一点,所以它使用你的模型&C而不是特维德的,当然)。
其他提示
我管理使用特技这样来查询实体NULL值:
SELECT * FROM为MyModel WHERE intProp <0
自然没有GARANTIE这种nondocumented方法将是与将来的版本兼容。