Requête DynamoDB avec une clé de hachage et une gamme de clé avec Boto3
J'ai de la difficulté à l'aide d'AWS Boto3 à la requête DynamoDB avec une clé de hachage et une gamme de clés en même temps à l'aide de la recommander KeyConditionExpression. 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 l'exécute 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
À partir de ma compréhension du type M serait une carte ou un type de dictionnaire et je suis en utilisant un type N qui est un type de numéro et correspond à mon schéma de la table pour la gamme de clés. Si quelqu'un pouvait expliquer pourquoi cette erreur qui se passe ou je suis aussi ouverte à une autre manière d'accomplir la même requête, même si vous ne pouvez pas expliquer pourquoi cette erreur existe.
OriginalL'auteur Sean Pannella | 2015-10-22
Vous devez vous connecter pour publier un commentaire.
Le nom de Boto 3 SDK construit une Expression de Condition pour vous lorsque vous utilisez la Clé et Attr fonctions importées de boto3.dynamodb.conditions:
Référence: Étape 4: Requête et d'Analyse des Données
Espère que cela aide
J'ai une liste de valeurs de hachage. Est-il possible que je peux joindre une liste de booléens
|
l'aide de la liste de compréhension? Quelque chose le long des lignes de'|'.join([Key('hash_key').eq(v) for v in values])
OriginalL'auteur Filipe