gpt4 book ai didi

python - 在 DynamoDB 表中存储字典列表

转载 作者:行者123 更新时间:2023-12-03 00:48:19 25 4
gpt4 key购买 nike

我想在 DynamoDB 中存储 Elasticsearch 域的标签列表,但我遇到了一些错误。

我正在使用 list_tags() 函数获取标签列表:
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/es.html#ElasticsearchService.Client.list_tags

response = client.list_tags(
ARN='string'
)

它返回:
{
'TagList': [
{
'Key': 'string',
'Value': 'string'
},
]
}

这是他们在文档中所说的:
响应结构

(字典)——
ListTags 操作的结果。包含所有请求的 Elasticsearch 域的标签。
标记列表(列表)--
请求的 Elasticsearch 域的标签列表。
(字典)——
指定资源标签的键值对。


现在我尝试使用各种方式在 DynamoDB 中插入列表,但我总是遇到错误:
 ':TagList': {
'M': response_list_tags['TagList']
},

Invalid type for parameter ExpressionAttributeValues.:TagList.M, value: [{'Key': 'Automation', 'Value': 'None'}, {'Key': 'Owner', 'Value': 'owner'}, {'Key': 'BU', 'Value': 'DS'}, {'Key': 'Support', 'Value': 'teamA'}, {'Key': 'Note', 'Value': ''}, {'Key': 'Environment', 'Value': 'dev'}, {'Key': 'Creator', 'Value': ''}, {'Key': 'SubProject', 'Value': ''}, {'Key': 'DateTimeTag', 'Value': 'nodef'}, {'Key': 'ApplicationCode', 'Value': ''}, {'Key': 'Criticity', 'Value': '3'}, {'Key': 'Name', 'Value': 'dev'}], type: , valid types: : ParamValidationError



尝试使用 L 而不是 M 并得到了这个:

Unknown parameter in ExpressionAttributeValues.:TagList.L[11]: "Value", must be one of: S, N, B, SS, NS, BS, M, L, NULL, BOOL: ParamValidationError

最佳答案

您遇到的具体错误是因为您使用的是 native DynamoDB 文档项 JSON 格式,该格式要求任何属性值(包括映射中的键值,嵌套在列表中)都必须完全限定类型作为键值.

有两种方法可以做到这一点,根据您的问题,我不确定您是否想将这些键值标记对象存储为列表,或者您想将其存储为 Dynamo 中的实际 map 。

无论哪种方式,我都建议您对列表进行 JSON 编码,并将其作为字符串值存储在 DynamoDB 中。没有很好的理由让您费力将其存储为 map 或列表。

但是,如果您真的想要,您可以转换为 DynamoDB 原生 JSON 并存储为 map 。你最终会得到这样的东西:

 ':TagList': {
'M': {
'Automation': { 'S': 'None' },
'Owner': {'S': 'owner'},
'BU': {'S': 'DS'},
'Support': {'S': 'teamA'}
...
}
}

另一种可能性是使用 map 列表:
  ':TagList': {
'L': [
'M': {'Key': {'S': 'Automation'}, 'Value': { 'S': 'None' }},
'M': {'Key': {'S': 'Owner'}, 'Value' : {'S': 'owner'}},
'M': {'Key': {'S': 'BU'}, 'Value': {'S': 'DS'}},
'M': {'Key': {'S': 'Support'}, 'Value': {'S': 'teamA'}}
...
]
}

但根据我的经验,我从来没有从在 Dynamo 中存储这样的数据中获得任何真正的值(value)。相反,将这些标签存储为 JSON 字符串既简单又不易出错。你最终得到这个:
  ':TagList': {
'S': '{\'Key\': \'Automation\', \'Value\': \'None\'}, {\'Key\': \'Owner\', \'Value\': \'owner\'}, {\'Key\': \'BU\', \'Value\': \'DS\'}, {\'Key\': \'Support\', \'Value\': \'teamA\'}, ... }'
}

你所要做的就是扭动相当于:
 ':TagList': {
'S': json.dumps(response_list_tags['TagList'])
}

关于python - 在 DynamoDB 表中存储字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57494372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com