如果 DynamoDB 项目不存在或具有相同的值,则放置该项目

Putting a DynamoDB item if it doesn't exist, or does with identical values

我正在尝试编写一些代码,在两种情况下将项目放入 dynamo 数据库中:

  1. 主键不存在
  2. 它确实存在,它的值与我输入的相同

我尝试使用以下代码:

table.put_item(
    Item={
        'example': 'foobar'
    },
    ConditionExpression='attribute_not_exists(example) OR (example = :value)',
    ExpressionAttributeValues={
        ':value': {'S': 'foobar'}
    }
)

当项目不存在时,这工作正常,但条件表达式的第二部分似乎总是失败:

(example = :value)

为了这个问题的目的,假设数据库有以下内容:

[
    {'example': 'foobar'}
]

我的条件表达式有问题吗?

根据 docTable 资源的 put_item 操作接受以下内容作为 ExpressionAttributeValues 参数的输入:

ExpressionAttributeValues={
    'string': 'string'|123|Binary(b'bytes')|True|None|set(['string'])|set([123])|set([Binary(b'bytes')])|[]|{}
}

因此,从

    ExpressionAttributeValues={
        ':value': {'S': 'foobar'}
    }

    ExpressionAttributeValues={
        ':value': 'foobar'
    }

会起作用。