匹配数据存储区查询中的所有记录

时间:2010-07-12 08:06:21

标签: python google-app-engine web-applications google-cloud-datastore

有没有办法替代:

def get_objects(attr1,attr2,..):
    objects = Entities.all()

    if attr1 != None:
        objects.filter('attr1',attr1)
    if attr2 != None:
        objects.filter('attr2',attr2)
    ....
    return objects

使用单个查询:

Entities.all().filter('attr1',attr1).filter('attr2',attr2)

使用某种“匹配所有”标志(可能是正则表达式查询)? 第一个查询的问题是(除了丑陋)它为所有可能的过滤器序列创建索引。

1 个答案:

答案 0 :(得分:1)

数据存储区不支持正则表达式查询或OR查询。

但是,如果您只使用相等过滤器,则不应自动创建索引;只要过滤器的数量仍然很少,就可以使用合并连接策略来提供这些类型的查询(如果尝试添加太多过滤器,则会收到错误,指示现有索引不能用于执行查询有效;但是,尝试在这种情况下添加所需的索引通常会导致爆炸索引问题。)

第一种方法中的丑陋可能可以通过将列表传递给函数而不是单个变量来解决,然后使用列表推导而不是一堆if语句。