尝试使用python客户端更新DynamoDb中的列时出现错误

时间:2019-02-08 08:18:39

标签: python-3.x amazon-dynamodb aws-sdk boto3

我有一个dynamoDB表,键名称为id,一个String字段称为state。我只想使用update_item DynamoDb Python客户端更新状态值。

DDB_CLIENT.update_item(
            Key={
                    'id' : {'S': id}
                },
            TableName='TrackingState',
            UpdateExpression="set state = :r",
            ExpressionAttributeValues={
                ':r': '"state": {"S": "IN_PROGRESS"}'
            }
        )

我收到一个错误:Invalid type for parameter ExpressionAttributeValues type: <class 'str'>, valid types: <class 'dict'>

如果我尝试将expressionAttributeValues设置为:

':r' : {"state": {"S": "IN_PROGRESS"}} I get the error: Unknown parameter in ExpressionAttributeValues.:r: "state", must be one of: S, N, B, SS, NS, BS, M, L, NULL, BOOL

如果我尝试

':r' : {"S": "QUEUED"}
Invalid UpdateExpression: Attribute name is a reserved keyword; reserved keyword: state

更新DynamoDb表中条目的正确方法是什么

1 个答案:

答案 0 :(得分:1)

  

如果我尝试

     

':r':{“ S”:“ QUEUED”}无效的UpdateExpression:属性名称是   保留关键字;保留关键字:状态

是的,不能在表达式中使用 state 关键字,因此ExpressionAttributeNames字典允许使用它。

DDB_CLIENT.update_item(
            Key={
                    'id' : {'S': id}
                },
            TableName='TrackingState',
            UpdateExpression="set #s = :r",
            ExpressionAttributeNames={
                '#s': "state"
            },
            ExpressionAttributeValues={
                ':r': {"S": "QUEUED"}
            }
        )