Есть ли способ вообще запросить global secondary index
dynamodb с помощью boto3
. Я не нахожу онлайн-уроки или ресурсы.
Как мы запрашиваем вторичный индекс dynamodb с помощью boto3?
Ответ 1
Вам нужно IndexName
параметр IndexName
для функции query
.
Это имя индекса, которое обычно отличается от имени атрибута index (по умолчанию имя индекса имеет суффикс -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)
)
Чтобы проверить имя индекса, перейдите на вкладку " Indexes
" таблицы на веб-интерфейсе AWS. Вам понадобится значение из столбца Name
.
Ответ 2
Для тех, кто использует клиент 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]