1

有没有一种方法来替代:匹配数据存储中查询所有记录

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

数据存储不支持正则表达式查询或OR查询。但是,如果您只使用平等筛选器,则不应自动创建索引;否则,索引不应自动创建;否则,索引不应自动创建。只要过滤器的数量仍然很少(如果您尝试添加过多的过滤器,则会收到一个错误,指出现有索引不能用于执行),则可以使用合并连接策略来处理这些类型的查询该查询有效;但是,尝试在这种情况下添加所需的索引通常会导致索引爆炸问题。)

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

+0

不幸的是,我不得不查询日期时间属性,所以不仅使用相等过滤器。 感谢您的第二个提示。 – 2010-07-12 12:29:04