簡體   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