【问题标题】:Getting errors while trying to update column in DynamoDb using python client尝试使用 python 客户端更新 DynamoDb 中的列时出错
【发布时间】:2019-02-08 21:55:46
【问题描述】:

我有一个 dynamoDB 表,其中键名为 id 和一个名为 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 表中的条目的正确方法是什么

【问题讨论】:

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


    【解决方案1】:

    如果我尝试

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

    没错,state关键字不能用于表达式,所以ExpressionAttributeNames dict允许使用它。

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

    【讨论】:

      猜你喜欢
      • 2020-11-10
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多