Saltar al contenido

¿Cómo consultamos un índice secundario de dynamodb usando boto3?

Después de de una prolongada selección de datos hemos podido resolver este enigma que presentan ciertos los usuarios. Te ofrecemos la solución y esperamos serte de mucha ayuda.

Solución:

Tienes que proporcionar un IndexName parámetro para el query función.

Este es el nombre del índiceque suele ser diferente de la nombre del índice attribute (el nombre del índice tiene un -index sufijo predeterminado, aunque puede cambiarlo durante la creación de la tabla). Por ejemplo, si su índice attribute se llama video_idsu nombre de índice es probablemente 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)
)

para comprobar el nombre de índiceVe a la Indexes pestaña de la tabla en la interfaz web de AWS. Necesitará un valor de la Name columna.

Para cualquiera que use el cliente boto3, el siguiente ejemplo debería funcionar:

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]

Agregando la técnica actualizada:

    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]

Reseñas y valoraciones

Si te sientes incitado, tienes la opción de dejar un artículo acerca de qué te ha impresionado de esta reseña.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *