繁体   English   中英

如何在我根据键值列表获取记录的地方查询 dynamodb?

[英]How to query dynamodb where I have fetch records based on a list of key values?

我有一个 dynamodb 表,在该表上使用分区键和排序键定义了 GSI。

假设分区键是name ,排序键是 GSI 的ssn

我必须根据名称和 ssn 获取,下面是我正在使用的查询,它工作正常。

table.query(IndexName='lookup-by-name',KeyConditionExpression=Key('name').eq(name)\
                & Key('ssn').eq(ssn))

现在,我必须根据名称和 ssns 列表进行查询。

例如

ssns=['ssn1','ss2','ss3',ssn4']
name='Alex'

查询名称为“Alex”且其 ssn 存在于 ssns 列表中的所有记录。

我该如何实施这样的事情?

虽然 DynamoDB 本机 SDK 无法提供执行此操作的功能,但您可以使用 PartiQL 实现它,它提供了一个类似于 SQL 的接口来与 DynamoDB 进行交互。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-gettingstarted.html

import boto3
client = boto3.client('dynamodb', region_name="eu-west-1")

name = 'Alex'
ssns = ['ssn1','ssn2','ssn3','ssn4']

response = client.execute_statement(
    Statement = "Select * from \"MyTableTest\".\"lookup-by-name\" where \"name\" = '%s' AND \"ssn\" IN %s" % (name, ssns)
)

print(response['Items'])

它还会要求您使用较低级别的Client而不是您在上面使用的Table级别资源。

您将不得不进行多次查询。

最后仅使用名称作为关键条件,然后在 python 代码中过滤掉 ssn。

下面对我有用,因为记录的数量不是很多。

response=table.query(IndexName='lookup-by-name',KeyConditionExpression=Key('name').eq(name)
ssns=['ssn1','ss2','ss3',ssn4']
data= response['Items']

data=list(filter(lambda record: record['ssn'] in ssns,data))
return data

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM