Как мы запрашиваем вторичный индекс dynamodb с помощью boto3?

Есть ли способ вообще запросить global secondary index 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]