python - 如何使用 boto3 有条件地将项目插入 dynamodb 表

标签 python amazon-dynamodb boto3

如果我有一个带有 userId 哈希键和 productId 范围键的表,我如何使用 boto3 的 dynamodb 绑定(bind)将一个项目放入该表中?

对 put_item 的正常调用如下所示

table.put_item(Item={'userId': 1, 'productId': 2})

我的 ConditionExpression 调用如下所示:

table.put_item(
    Item={'userId': 1, 'productId': 2}, 
    ConditionExpression='userId <> :uid AND productId <> :pid', 
    ExpressionAttributeValues={':uid': 1, ':pid': 3}
)

但这每次都会引发 ConditionalCheckFailedException。是否存在具有相同 productId 的项目。

最佳答案

不幸的是,这方面的文档不是很清楚。我需要完成类似的事情,这对我有用,使用 boto3:

try:
    table.put_item(
        Item={
            'foo':1,
            'bar':2,
        },
        ConditionExpression='attribute_not_exists(foo) AND attribute_not_exists(bar)'
    )
except botocore.exceptions.ClientError as e:
    # Ignore the ConditionalCheckFailedException, bubble up
    # other exceptions.
    if e.response['Error']['Code'] != 'ConditionalCheckFailedException':
        raise

与另一个答案类似,关键在于 attribute_not_exists 函数,但我最初不清楚如何让它工作。经过一些实验,我能够按照上述方式进行操作。

关于python - 如何使用 boto3 有条件地将项目插入 dynamodb 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37053595/

相关文章:

python - wxPython - wx.MessageDialog 不点击就消失

python+mysql让代码每分钟运行一次

amazon-web-services - 我们如何在 Cloudformation 模板中将相同的标签使用到两个 AWS::DynamoDB::Table 中

ios - aws dynamodb 如何在 ios 中使用对象映射器和批处理获取

android - Android 上的 AWS DynamoDB : Inserting JSON Directly?

python - Boto3获取S3存储桶的内容

python - 这个序列 '[[A-Z][a-z]]' 在 python 的正则表达式中意味着什么?

python - 对于 SQL Server 以外的数据库,to_sql() 可替代 fast_executemany

amazon-web-services - 为什么 S3 对象的 ETag 会在副本下更改?

python-3.4 - 我如何循环通过 nextToken