Boto3: используйте «NOT IN» для сканирования в DynamoDB - PullRequest
0 голосов
/ 16 мая 2018

Мне удалось создать выражение для фильтрации элементов из сканирования. Что-то вроде:

users = [1, 2, 3]
table.scan(
    FilterExpression=Attr('user_id').is_in(users) 
)

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

1 Ответ

0 голосов
/ 16 мая 2018

Единственный способ, который я нашел, - это использовать boto3.client вместо таблиц и низкоуровневого синтаксиса.Что-то вроде этого:

lst_elements = ''
attr_elements = {}
for id in user_ids:
    lst_element += 'user' + str(id)
    attr_elements['user' + str(id)] = id

client.scan(
    TableName='some_table_name',
    FilterExpression="NOT (user_id IN ({}))".format(lst_element[:-1]),
    ExpressionAttributeValues=attr_elements
)

Это решение отлично работает для меня, но выглядит действительно сложным.Поэтому, если вы знаете лучший способ сделать это, пожалуйста, добавьте свой ответ.

...