我设法制作了一个过滤表达式,用于过滤来自Scan的项目。 Smth喜欢:
users = [1, 2, 3]
table.scan(
FilterExpression=Attr('user_id').is_in(users)
)
我可以以某种方式将其从过滤转换为排除,因此除了带有ID 1,2,3的用户外,我将获得所有用户。
答案 0 :(得分:1)
到目前为止,我找到的唯一方法是使用boto3.client而不是表和低级语法。像这样的Smth:
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
)
这个解决方案适合我,但看起来很复杂。因此,如果您知道更好的方法,请添加您的答案。
答案 1 :(得分:0)
您可以使用~
运算符轻松完成此操作:
users = [1, 2, 3]
table.scan(
FilterExpression=~Attr('user_id').is_in(users)
)
检查__invert__
触发的condition.py中~
的重载实现。