【问题标题】:Incorrect operand type for operator or function; operator: ADD, operand type: STRING, typeSet: ALLOWED_FOR_ADD_OPERAND运算符或函数的操作数类型不正确;运算符:ADD,操作数类型:STRING,typeSet:ALLOWED_FOR_ADD_OPERAND
【发布时间】:2021-09-25 04:44:56
【问题描述】:

我正在尝试更新 DynamoDB 中的一行并添加新列

resp = table.update_item(
            Key={
                'Pkey': 'key1',
                'Skey': 'skwy2'
            },
            UpdateExpression='ADD dateModified :input2, SET IsActive = :input1',
            ExpressionAttributeValues={
                ':input1': False,
                ':input2' : 'Test'
            },
            ReturnValues="UPDATED_NEW"
        )

输入2出错, 我什至尝试过

':input2': {'S' : "Test"}

这行不通。

为什么我会遇到问题

【问题讨论】:

    标签: python aws-lambda amazon-dynamodb


    【解决方案1】:

    您可以查看文档 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.ADD - ADD 适用于数字和集合。

    ADD 操作仅支持数字和集合数据类型。

    还有一个说明:

    一般来说,我们建议使用 SET 而不是 ADD。

    由于您想添加新值,SET 完全有能力做到这一点。来自https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.SET:

    在更新表达式中使用 SET 操作向项目添加一个或多个属性。如果这些属性中的任何一个已经存在,它们将被新值覆盖。

    所以你可以跳过添加操作,直接使用SET

    但是,根据 python 库,您可能需要将值包装为 {"BOOL":false} 和 {"S":"Test"}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 2011-07-07
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多