0

我在使用使用多个过滤器的查询时遇到问题(我使用的是 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

但这个解决方案并不是很好。有人有更好的主意吗?

谢谢

4

3 回答 3

2

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

于 2014-07-07T21:18:40.340 回答
1

您需要使用query.AND 或 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'))))
于 2012-06-18T14:42:03.993 回答
1

这就是我解决它的方法:

foo = something.query(ndb.query.AND(something.a==5, something.b<8, ndb.query.OR(something.c==1, something.c==2)))
于 2012-06-19T08:25:24.730 回答