GAE ndb.query.filter()不起作用

时间:2013-09-04 16:17:56

标签: google-app-engine app-engine-ndb

我有一个继承自ndb.Model的Story模型,带有IntegerProperty wordCount。我正在尝试查询具有特定字数范围的Story对象,但无论过滤器属性如何,查询似乎都会返回相同的结果。

对于此代码:

q = Story.query()
q.filter(Story.wordCount > 900)
for s in q.fetch(5):
    print s.title / s.wordCount

我得到了这个结果:

  

如果只是...... / 884
  定时发布/ 953
  祖父悖论/ 822
  利用brane-deer / 1618
  Quantum erat demonstrandum / 908

这是故事宣言:

class Story(ndb.Model):
    title = ndb.StringProperty(required=True)
    wordCount = ndb.IntegerProperty('wc')

我希望只能获得900字的故事 - 或者没有。不平等和排序也被打破。我尝试部署到GAE,我看到了相同的破坏结果。

关于导致这种情况的任何想法?

1 个答案:

答案 0 :(得分:7)

NDB查询是不可变的,当您调用q.filter(Story.wordCount > 900)时,您正在创建新查询,而不是将其分配给任何内容。重新分配到q变量应该适合您:

q = Story.query()
q = q.filter(Story.wordCount > 900)
for s in q.fetch(5):
    print s.title / s.wordCount