放置 DynamoDB 项目(如果它不存在,或者具有相同的值)



我正试图编写一些代码,在两个条件下将一个项目放入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'}
]

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

根据文档,Table资源的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'
}

将起作用。

相关内容

最新更新