如何在Google AppEngine中过滤多个属性? (蟒蛇)

时间:2012-06-18 14:38:37

标签: python google-app-engine

使用多个过滤器的查询时遇到问题(我使用的是NDB而不是DB):

...
foo = something.query(something.a==5, something.b<8, something.c<3).order(something.b).fetch(1)
...

我收到此错误:

Only one inequality filter per query is supported.

我可以通过使用类似的东西来解决这个问题:

...
foo = something.query(something.a==5, something.b<8).order(something.b).fetch()
#loop through each one of those rows and add those who have foo.c<3 to some array

但该解决方案并不是很好。有没有人有更好的想法?

由于

3 个答案:

答案 0 :(得分:2)

我有一个相关的问题,我使用ComputedProperty来解决它。例如,你可以有一个ComputedProperty(lambda self:self.b&lt; 8和self.c&lt; 3),然后只查询ComputedProperty是否为真。

答案 1 :(得分:1)

您需要使用query.AND or query.OR

qry = Article.query(query.AND(Article.tags == 'python',
                              query.OR(Article.tags.IN(['ruby', 'jruby']),
                                       query.AND(Article.tags == 'php',
                                                 Article.tags != 'perl'))))

答案 2 :(得分:1)

这就是我解决它的方法:

foo = something.query(ndb.query.AND(something.a==5, something.b<8, ndb.query.OR(something.c==1, something.c==2)))