amazon-web-services - nodejs - lambda dynamodb python
¿Cómo consultamos un índice secundario de dynamodb utilizando boto3? (3)
Añadiendo 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]
¿Hay alguna forma de consultar el global secondary index
de dynamodb usando boto3
? No encuentro ningún tutorial o recurso en línea.
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]
IndexName
proporcionar un parámetro IndexName
para la función de query
.
Este es el nombre del índice , que suele ser diferente del nombre del atributo del índice (el nombre del índice tiene un sufijo de -index
por defecto, aunque puede cambiarlo durante la creación de la tabla). Por ejemplo, si su atributo de índice se llama video_id
, su 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 verificar el nombre del índice , vaya a la pestaña Indexes
de la tabla en la interfaz web de AWS. Necesitará un valor de la columna Name
.