Python 3.x 无法使用boto3从DynamoDB StringSet中删除项
我有一个包含StringSet类型属性的表。属性名称为Python 3.x 无法使用boto3从DynamoDB StringSet中删除项,python-3.x,amazon-web-services,amazon-dynamodb,boto3,Python 3.x,Amazon Web Services,Amazon Dynamodb,Boto3,我有一个包含StringSet类型属性的表。属性名称为allDevices。我正在尝试从StringSet中删除设备id。但是,当我运行下面的代码时,它不会从StringSet中删除字符串。它也不会抛出任何错误。当尝试删除设备IDfakeID1时,响应为: {'Attributes':{'allDevices':{'fakeID1','fakeID2'},'ResponseMetadata':{'RequestId':'','HTTPStatusCode':200,'HTTPHeaders':
allDevices
。我正在尝试从StringSet中删除设备id。但是,当我运行下面的代码时,它不会从StringSet中删除字符串。它也不会抛出任何错误。当尝试删除设备IDfakeID1
时,响应为:
{'Attributes':{'allDevices':{'fakeID1','fakeID2'},'ResponseMetadata':{'RequestId':'','HTTPStatusCode':200,'HTTPHeaders':{'server':'server','date':'Fri,2019年2月22日09:04:52 GMT','content type':'application/x-amz-json-1.0','content length':'93','connection':'keep alive','x-amzn-RequestId':'','x-amz-crc32':',“RetryAttempts”:0}
您只需要对ExpressionAttribute值做一个小的修改。要将单个字符串转换为一个集合,必须首先将其设置为列表
ExpressionAttributeValues={
':s': set([deviceID]),
}
请注意,将变量放入[]以使其成为列表与不放入[]之间的区别
>>> deviceID = "WB529"
>>> set(deviceID)
set(['9', '2', 'B', '5', 'W'])
>>> set([deviceID])
set(['WB529'])
此删除操作将指示其成功,并返回“更新”属性,即使未进行任何更改。我有一些非常相似的代码;从响应中无法判断您是从stringset中删除了一个元素,还是从一开始就不存在该元素
我还没有尝试过,但我相信添加一个ConditionExpression会给你反馈(该操作要么成功,要么抛出异常)。你知道这一点吗?我也有同样的问题