如何在 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之lambda函数

Python进阶-Ⅷ 匿名函数 lambda

如何在python中使用lambda函数[重复]

python里 key=lambda d:d[0]是啥意思?谢谢

如何从 AWS Lambda Python 连接到 Informix DB

我希望使用 lambda 和 pandas 使用 pythonic 方式优化代码