У меня есть таблица, которая содержит атрибут типа StringSet.Имя атрибута allDevices
.Я пытаюсь удалить идентификатор устройства из StringSet.Однако когда я запускаю приведенный ниже код, он не удаляет строку из StringSet.Это также не выдает никакой ошибки.При попытке удалить ID устройства fakeID1
ответ будет:
{'Attributes': {'allDevices': {'fakeID1', 'fakeID2'}}, 'ResponseMetadata': {'RequestId': '<removed>', 'HTTPStatusCode': 200, 'HTTPHeaders': {'server': 'Server', 'date': 'Fri, 22 Feb 2019 09:04:52 GMT', 'content-type': 'application/x-amz-json-1.0', 'content-length': '93', 'connection': 'keep-alive', 'x-amzn-requestid': '<removed>', 'x-amz-crc32': '<removed>'}, 'RetryAttempts': 0}}
Как получить DynamoDB для удаления строки из StringSet?
Код Python:
dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
table = dynamodb.Table('sniffer-users')
try:
response = table.update_item(
Key={
'username': user,
},
UpdateExpression="DELETE allDevices :s",
ExpressionAttributeValues={
':s': set(deviceID),
},
ReturnValues="UPDATED_NEW"
)
print(response)
except ClientError as e:
print(e.response['Error']['Message'])
return -9
Вещи, которые я пробовал:
- Удаление
set()
со всего идентификатора устройства - Изменить
DELETE
на REMOVE
- Стучу головой о стену, умоляю и умоляю
- Явно устанавливаю
fakeID1
, чтобы он читал ':s': set('fakeID1'),
- Используя синтаксис
':s': {'SS': [oldDeviceID]},
- Четырехкратная проверка того, что
allDevices
совпадает с кодом в DDB - Добавление чего-либо к
allDevices
- это работает безупречно - Изменение времени выполнения с Python 3.7 на Python 2.7