global secondary index
を使用してdynamodbのboto3
を照会する方法はありますか?オンラインチュートリアルやリソースが見つかりません。
IndexName
関数のquery
パラメーターを提供する必要があります。
これはnameインデックスのであり、通常はインデックスの名前attribute(インデックスの名前には-index
サフィックスはデフォルトで設定されていますが、テーブルの作成中に変更できます。たとえば、インデックス属性の名前がvideo_id
、インデックス名はおそらくvideo_id-index
。
import boto3
from boto3.dynamodb.conditions import Key
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('videos')
video_id = 25
response = table.query(
IndexName='video_id-index',
KeyConditionExpression=Key('video_id').eq(video_id)
)
インデックス名を確認するには、AWSのウェブインターフェースのテーブルのIndexes
タブに移動します。 Name
列の値が必要です。
Boto3クライアントを使用している場合、以下の例が機能します。
import boto3
# for production
client = boto3.client('dynamodb')
# for local development if running local dynamodb server
client = boto3.client(
'dynamodb',
region_name='localhost',
endpoint_url='http://localhost:8000'
)
resp = client.query(
TableName='UsersTabe',
IndexName='MySecondaryIndexName',
ExpressionAttributeValues={
':v1': {
'S': '[email protected]',
},
},
KeyConditionExpression='emailField = :v1',
)
# will always return list
items = resp.get('Items')
first_item = items[0]
更新されたテクニックの追加:
import boto3
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource(
'dynamodb',
region_name='localhost',
endpoint_url='http://localhost:8000'
)
table = dynamodb.Table('userTable')
attributes = table.query(
IndexName='UserName',
KeyConditionExpression=Key('username').eq('jdoe')
)
if 'Items' in attributes and len(attributes['Items']) == 1:
attributes = attributes['Items'][0]