Есть ли у DynamoDB значение по умолчанию / no-op FilterExpression? - PullRequest
0 голосов
/ 03 мая 2019

Я хочу отсканировать небольшую таблицу DynamoDB, используя Boto3, и дополнительно разрешить вызывающей стороне этого кода указывать, когда к этому сканированию должны применяться дополнительные условия.

В коде было бы удобно сделать это:

scan_kwargs = {'Select': 'ALL_ATTRIBUTES'}
filter_exp = ''  # WHAT DO HERE?
if condition1:
    filter_exp &= Attr('attribute').is_in(['blah', 'bloop'])
if condition2:
    filter_exp &= Attr('deleted').is_eq(True)
scan_kwargs.update({'FilterExpression': filter_exp})
response = table.scan(**scan_kwargs)

Я пытаюсь выяснить, могу ли я установить FilterExpression по умолчанию (указано выше в комментарии), чтобы сканирование работало при отсутствии фильтров, которые нужно применить.

Насколько я могу судить, это невозможно.

1 Ответ

0 голосов
/ 03 мая 2019

Беглый, но я решил, что смогу ...

filter_exp = Attr('pKey').exists()

... где pKey - первичный ключ или другое обязательное поле в таблице.

Это определенно не «правильное» решение, но, возможно, это самый надежный неоперативный фильтр, на котором я могу построить условно.

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

...