【问题标题】:Querying DynamoDB without PrimaryKey with Lambda使用 Lambda 查询没有 PrimaryKey 的 DynamoDB
【发布时间】:2022-01-09 23:06:50
【问题描述】:

我想使用运行 python 的 lambda 函数查询我的 DynamoDB。

DynamoDB 表(名称:Testing-Table):

  • user_id(字符串)PrimaryKey
  • 状态(字符串)
  • 目的地(字符串)

我想查询代码中的表。我希望 lambda 函数返回所有 user_idstatus 属性和 active

table = dynamodb.Table('Testing-Table')
def lambda_handler(event, context):

response = table.query (
    KeyConditionExpression=Key('status').eq('active')
)

for i in response['Items']:
    print(i['user_id'],":",i['status'])

#return 'listing results'

我还添加了一个新索引:

我尝试创建一个以 status 作为主键的表,并且我的代码有效...但是主键必须是唯一的,所以当我尝试在表中创建一个新项目时,我无法设置状态再次处于活动状态。

如有必要,我会在问题中添加更多信息。我会感谢您的帮助。

--编辑-- 我的代码status 是我的表的 PrimaryKey 时才有效。

我的问题是:我可以使用 status PartitionKey 而不是 PrimaryKey used_id 来查询我的 DynamoDB 表吗?最重要的是......它是如何完成的?

【问题讨论】:

  • 您的问题是什么?您添加的代码 sn-p 是否有效?
  • 它可以工作,但它不能满足我的需要。我需要过滤活动、非活动状态。作为 Lambda 执行的结果获取我的表的 user_id。

标签: python amazon-web-services aws-lambda amazon-dynamodb


【解决方案1】:

我找到了我要找的东西:

我必须像这样在我的代码中添加 IndexName

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Testing-Table')

def lambda_handler(event, context):

response = table.query (
    IndexName='status-index',
    KeyConditionExpression=Key('status').eq('active')
)

for i in response['Items']:
    print(i['user_id'],":",i['status'])

这是结果的图像:

【讨论】:

    猜你喜欢
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多