python-3.x - 如何使用 DICT 数据类型 (boto3) 更新 DynamoDB 表

标签 python-3.x amazon-dynamodb boto3

我创建了一个用于存储元数据的 DynamoDB 表,对于不同类型的数据具有不同的属性(文件大小、日期等,作为单独的属性)。

我正在尝试使用 Python3 字典并将其用作需要上传到表的一堆属性的源。到目前为止,我已经能够将整个字典作为一个属性成功上传,但我希望每个键:值对在数据库中都是它自己的属性。换句话说,Python3 字典中的每个键:值对最终都应该在 DynamoDB 表中作为自己的键:值对。我知道我下面的代码到目前为止还没有设计成那样。

到目前为止,这是我的代码:

file_attributes = dict(file.items())

    # Add all metadata to DynamoDB:
    response = table.update_item(
        UpdateExpression="set File_attributes = :f,"
        Key={
            'file_name': key,
        },
        ExpressionAttributeValues={
            ':f': file_attributes,

        },
        ReturnValues="UPDATED_NEW"
    )

最佳答案

我认为您正在寻找以下方面的内容:

update_expression = 'SET {}'.format(','.join(f'#{k}=:{k}' for k in file))
expression_attribute_values = {f':{k}': v for k, v in file.items()}
expression_attribute_names = {f'#{k}': k for k in file}

response = table.update_item(
    Key={
        'file_name': key,
    },
    UpdateExpression=update_expression,
    ExpressionAttributeValues=expression_attribute_values,
    ExpressionAttributeNames=expression_attribute_names,
    ReturnValues='UPDATED_NEW',
)

我修改了您的示例以使用 ExpressionAttributeValues 和 ExpressionAttributeNames 动态生成更新表达式。需要使用别名,因为我们不知道 file 里面的项目的名称是什么。字典。生成的更新表达式将包含 file 中每个顶级键的 set 语句字典。属性名称以 # 为前缀符号,并且属性值以 : 为前缀标志。

关于python-3.x - 如何使用 DICT 数据类型 (boto3) 更新 DynamoDB 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52367094/

相关文章:

python-3.x - 如何比较多逻辑语句中数据帧之间的日期时间?

python-3.x - 如何使用elasticsearch python在现有字段上 append ?

python - AWS 路由表导出详细信息到 CSV

amazon-web-services - AWS CodePipeline 自定义 Lambda 函数永远运行且永不返回

python - 从 s3 存储桶 (boto3) 获取特定文件

python - 获取具有两个特定关键字的行

python-3.x - Python : Check if string is in list otherwise throw error

amazon-web-services - 如何使用 EMR 上的 HiveQL 将 DynamoDB 上的 Map 数据类型列导出到具有 JSON 数据类型的 S3?

docker - 为什么DynamoDB本地不识别-shareDB选项?

python - 遍历 DynamoDB 表中的所有项目