我创建了一个用于存储元数据的 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/