1

Есть ли способ заменить:Matching все записи в запросе датастора

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

К сожалению, мне приходится запрашивать свойства datetime, поэтому используются не только фильтры равенства. Спасибо за второй отзыв. –

Смежные вопросы