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

标签 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)

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

最佳答案

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

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

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

关于python - 匹配数据存储查询中的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3226775/

相关文章:

python - 如何在 PLY 中做一个 IF 语句?

google-app-engine - 在 app.yaml 上指定的环境变量,但未在 main.go 上获取

java - ZK 在单个项目中使用多个 webapp

iPhone 网络应用程序 - 启动画面不起作用

javascript - cometd 事件不那么频繁

python - 如何在 Python Flask 中访问 # 之后的 URL 段?

python - 如何在 Watson Studio 的 WML 存储库中保存 keras 模型?

python - 检测具有特定颜色的圆形物体

python - 开源 Google App Engine Django 项目的好例子

python - 使用 bulkloader 从 Google App Engine 下载数据时出错