我正试图编写一些代码,在两个条件下将一个项目放入dynamo数据库:
- 主键还不存在
- 它确实存在,它的值与我的输入相同
我尝试使用以下代码:
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'
}
将起作用。