如果 DynamoDB 项目不存在或具有相同的值,则放置该项目
Putting a DynamoDB item if it doesn't exist, or does with identical values
我正在尝试编写一些代码,在两种情况下将项目放入 dynamo 数据库中:
- 主键不存在
- 它确实存在,它的值与我输入的相同
我尝试使用以下代码:
table.put_item(
Item={
'example': 'foobar'
},
ConditionExpression='attribute_not_exists(example) OR (example = :value)',
ExpressionAttributeValues={
':value': {'S': 'foobar'}
}
)
当项目不存在时,这工作正常,但条件表达式的第二部分似乎总是失败:
(example = :value)
为了这个问题的目的,假设数据库有以下内容:
[
{'example': 'foobar'}
]
我的条件表达式有问题吗?
根据 doc,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'
}
会起作用。
我正在尝试编写一些代码,在两种情况下将项目放入 dynamo 数据库中:
- 主键不存在
- 它确实存在,它的值与我输入的相同
我尝试使用以下代码:
table.put_item(
Item={
'example': 'foobar'
},
ConditionExpression='attribute_not_exists(example) OR (example = :value)',
ExpressionAttributeValues={
':value': {'S': 'foobar'}
}
)
当项目不存在时,这工作正常,但条件表达式的第二部分似乎总是失败:
(example = :value)
为了这个问题的目的,假设数据库有以下内容:
[
{'example': 'foobar'}
]
我的条件表达式有问题吗?
根据 doc,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'
}
会起作用。