它如何使查询ndb.AND条件更加智能

时间:2014-01-25 19:54:49

标签: arrays google-app-engine python-2.7 iteration app-engine-ndb

我尝试查询标签搜索 标签:ex.3多少个标签 q:标签数组ex。['foo','hoo','poo']

def queryByTags(cls, tags, q):

        def one():
            qry = models.Card.query(models.Card.tags_value == q[0])
            return qry

        def two():
            qry = models.Card.query(ndb.AND(models.Card.tags_value == q[0],
                                                models.Card.tags_value == q[1]))
            return qry

        def three():
            qry = models.Card.query(ndb.AND(models.Card.tags_value == q[0],
                                                models.Card.tags_value == q[1],
                                                models.Card.tags_value == q[2]))
            return qry

        tags_len = {1: one,
                    2: two,
                    3: three,
                    }

        return tags_len[tags]()  

此方法最多可使用3个标签。我可以自己复制代码并将其扩展到7,8,9 ...... 这是非常悲伤的方式...
有什么聪明的方法吗?

1 个答案:

答案 0 :(得分:1)

在伪python-ndb中(我没有运行我的代码,但你会得到它)我会说一种方法是做:

cards_count = Card.query().filter(tags_value==q[0])\
  .filter(tags_value==q[1])\
  .filter(tags_value==q[2]).count()

或迭代动态数组(未知长度)

cards_count = Card.query()
for value in q:
  q = q.filter(tags_value==value)
cards_count = q.count()