web-dev-qa-db-fra.com

Requête DynamoDB avec une clé de hachage et une clé de plage avec Boto3

J'ai du mal à utiliser AWS Boto3 pour interroger DynamoDB avec une clé de hachage et une clé de plage en même temps en utilisant la KeyConditionExpression recommandée. J'ai joint un exemple de requête:

import boto3
from boto3 import dynamodb
from boto3.session import Session
dynamodb_session = Session(aws_access_key_id=AWS_KEY,
              aws_secret_access_key=AWS_PASS,
              region_name=DYNAMODB_REGION)
dynamodb = dynamodb_session.resource('dynamodb')
table=dynamodb.Table(TABLE_NAME)
request = {
    'ExpressionAttributeNames': {
        '#n0': 'hash_key',
        '#n1': 'range_key'
    },
    'ExpressionAttributeValues': {
        ':v0': {'S': MY_HASH_KEY},
        ':v1': {'N': GT_RANGE_KEY}
    },
    'KeyConditionExpression': '(#n0 = :v0) AND (#n1 > :v1)',
    'TableName': TABLE_NAME
}
response = table.query(**request)

Lorsque je lance cela sur une table avec le schéma suivant:

Table Name: TABLE_NAME
Primary Hash Key: hash_key (String)
Primary Range Key: range_key (Number)

J'obtiens l'erreur suivante et je ne comprends pas pourquoi:

ClientError: An error occurred (ValidationException) when calling the Query operation: Invalid KeyConditionExpression: Incorrect operand type for operator or function; operator or function: >, operand type: M

D'après ma compréhension, le type M serait un type de carte ou de dictionnaire et j'utilise un type N qui est un type numérique et correspond à mon schéma de table pour la clé de plage. Si quelqu'un peut expliquer pourquoi cette erreur se produit ou si je suis également ouvert à une manière différente de réaliser la même requête, même si vous ne pouvez pas expliquer pourquoi cette erreur existe.

15
Sean Pannella

Le SDK Boto 3 crée une expression de condition pour vous lorsque vous utilisez les fonctions Key et Attr importées de boto3.dynamodb.conditions :

response = table.query(
    KeyConditionExpression=Key('hash_key').eq(hash_value) & Key('range_key').eq(range_key_value)

)

Référence: Étape 4: interroger et analyser les données

J'espère que cela aide

30
Filipe