Existe-t-il un moyen d'interroger le global secondary index
de dynamodb à l'aide de boto3
. Je ne trouve pas de tutoriels ou de ressources en ligne.
Vous devez fournir un paramètre IndexName
pour la fonction query
.
Il s’agit du nom de l’index _, qui est généralement différent de nom de l’index attribut (le nom de l’index porte le suffixe -index
par par défaut, bien que vous puissiez le changer lors de la création de la table). Par exemple, si votre attribut d'index est appelé video_id
, votre nom d'index est probablement 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)
)
Pour vérifier le nom d'index, accédez à l'onglet Indexes
de la table sur l'interface Web d'AWS. Vous aurez besoin d'une valeur de la colonne Name
.
Pour tous ceux qui utilisent le client boto3, l'exemple ci-dessous devrait fonctionner:
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]
Ajout de la technique mise à jour:
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]