【问题标题】:Matching all records in a datastore query匹配数据存储查询中的所有记录
【发布时间】:2010-07-12 08:06:20
【问题描述】:

有没有办法替代:

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)

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 不幸的是,我必须查询日期时间属性,因此不仅使用了相等过滤器。感谢您的第二个提示。
    猜你喜欢
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    相关资源
    最近更新 更多