null IntegerProperty的GQL测试

时间:2009-08-21 01:58:42

标签: null gql

我正在尝试在Google App引擎中查询IntegerProperty为null(无)的记录。这是我尝试没有成功的原因:

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()

2 个答案:

答案 0 :(得分:4)

您的代码看起来是正确的。您实际上有MyModel intProp None的任何实例吗?

编辑:根据OP的评论,这显然是架构迁移的问题;他添加了一个新属性,并期望现有实体出现(设置为None)。根据{{​​3}}

,这不是GAE中架构发生变化的方式
  

App Engine数据存储区没有   要求所有实体都有相同的   一组属性。更新后你的   模型添加新属性,现有   实体将继续存在   没有这些属性。在一些   情况,这很好,你   不需要再做任何工作了。什么时候   你想回去更新吗?   他们也有现有的实体   新物业?一种情况   当你想做一个查询时   基于新属性。在我们的   例如图片,查询等   “最受欢迎”或“最不受欢迎”   不会返回现有的图片,   因为他们(还)没有   评级属性。要解决这个问题,我们会   需要更新现有实体   在数据存储区中。

我所引用的文章继续通过展示一种方法来实现,但这是一种非常老式的方法,从GAE计划任务之前,远程apis,& c。我们现在可以做得更好。 App Engine Fan有一个非常近期的the docs,它显示了一般方法(以及他在自己的模式迁移过程中犯的错误,以便其他人可以避免它!),并指向post作为关键工具;他还指出remote API(来自Rietveld开源核心评论项目,由Python的作者,App Engine开发的主要贡献者Guido van Rossum发起),它可以整齐地完成任务(你''我需要稍微调整一下代码,这样它就会使用你的模型而不是Rietveld的。)

答案 1 :(得分:2)

我设法使用这样的技巧查询具有NULL值的实体:

SELECT * FROM MyModel WHERE intProp< 0

当然,没有任何保证,这种非文档方法将与未来的版本兼容。