Соответствие всем записям в запросе хранилища данных - PullRequest
1 голос
/ 12 июля 2010

Есть ли способ заменить:

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 Ответ

1 голос
/ 12 июля 2010

Хранилище данных не поддерживает запросы регулярных выражений или запросы OR.

Однако, если вы используете только фильтры равенства, индексы не должны создаваться автоматически;эти типы запросов могут обслуживаться с использованием стратегии слияния, если количество фильтров остается низким (если вы попытаетесь добавить слишком много фильтров, вы получите сообщение об ошибке, указывающее, что существующие индексы нельзя использовать для выполненияэффективный запрос, однако попытка добавить требуемые индексы в таком случае обычно приводит к проблеме взрывающихся индексов.)

Уродство в первом подходе, вероятно, можно решить, передав список в вашу функциювместо отдельных переменных, затем используйте понимание списка вместо набора операторов if.

...