【问题标题】:How to get/fetch certain columns from dynamoDB using python in Lambda?如何在 Lambda 中使用 python 从 dynamoDB 获取/获取某些列?
【发布时间】:2022-01-22 20:39:03
【问题描述】:
  1. 我在 dynamodb 中有一个名为“DATA”的表,其中有 20 到 25 列。但我只需要从 dynamodb 中提取 3 列。

  2. 必填列是 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 获取所需的列?

【问题讨论】:

标签: python pandas aws-lambda amazon-dynamodb


【解决方案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,我认为这是不可能的。
  • 是的,正确的。你能帮我解决这个问题吗
猜你喜欢
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
相关资源
最近更新 更多