如何在 Lambda 中使用 python 从 dynamoDB 获取/获取某些列?
Posted
技术标签:
【中文标题】如何在 Lambda 中使用 python 从 dynamoDB 获取/获取某些列?【英文标题】:How to get/fetch certain columns from dynamoDB using python in Lambda? 【发布时间】:2022-01-22 20:39:03 【问题描述】:我在 dynamodb 中有一个名为“DATA”的表,其中有 20 到 25 列。但我只需要从 dynamodb 中提取 3 列。
必填列是 status、ticket_id 和 country
table_name = 'DATA'
# dynamodb client
dynamodb_client = boto3.client('dynamodb')
必填列是状态、ticket_id 我可以使用下面提供的扫描来实现。但我想使用查询方法做同样的事情。
response = table.scan(AttributesToGet=['ticket_id','ticket_status'])
我用查询方法尝试了下面的代码。但我遇到了错误。
response = table.query(ProjectionExpression=['ticket_id','ticket_status']),keyConditionExpression('opco_type').eq('cwc') or keyConditionExpression('opco_type').eq('cwp'))
有什么方法可以只从 dynamo 获取所需的列?
【问题讨论】:
你需要使用投影表达式docs.aws.amazon.com/amazondynamodb/latest/developerguide/… 是的,我读过它。但是被卡住了,因为我们需要在那里放置键值对。我如何使用它来获取特定列中的所有值。请参阅我更新的问题。 @luk2302 【参考方案1】:如前所述,您需要使用 ProjectExpression:
dynamodb = boto3.resource('dynamodb', region_name=region)
table = dynamodb.Table(table_name)
item = table.get_item(Key='Title': 'Scarface', 'Year': 1983, ProjectionExpression='status, ticket_id, country')
注意事项:
最好使用资源而不是客户端。这将避免特殊的 dynamodb json 语法。 您需要将完整(复合)密钥设置为 get_item 所选列应使用逗号分隔的字符串 最好始终使用表达式属性名称: item = table.get_item(Key='Title': 'Scarface', 'Year': 1983,
ProjectionExpression='#status, ticket_id, country',
ExpressionAttributeNames='#status': 'status')
【讨论】:
#response = table.scan(AttributesToGet=['ticket_id','ticket_status']) 我应该使用投影表达式来达到同样的效果。任何帮助@kgiannakakis @Mahilan:确保您了解扫描和查询之间的区别。 请查看我更新的问题。我应该只获取包含所有值的列。上面的代码可以工作,但是有什么方法可以使用投影表达式来达到同样的效果。 您的意思是获取所有同时设置了ticket_id 和ticket_status 的项目?如果不创建 GSI,我认为这是不可能的。 是的,正确的。你能帮我解决这个问题吗以上是关于如何在 Lambda 中使用 python 从 dynamoDB 获取/获取某些列?的主要内容,如果未能解决你的问题,请参考以下文章
python里 key=lambda d:d[0]是啥意思?谢谢