J'utilise Lambda (Python) pour interroger ma base de données DynamoDB. J'utilise la bibliothèque boto3, et je suis en mesure de faire un "équivalent" requête:AWS DynamoDB Python - boto3 Les méthodes Key() non reconnues (Query)
Ce script fonctionne:
import boto3
from boto3.dynamodb.conditions import Key, Attr
import json
def create_list(event, context):
resource = boto3.resource('dynamodb')
table = resource.Table('Table_Name')
response = table.query(
TableName='Table_Name',
IndexName='Custom-Index-Name',
KeyConditionExpression=Key('Number_Attribute').eq(0)
)
return response
Cependant, quand je change l'expression de requête à ceci:
KeyConditionExpression=Key('Number_Attribute').gt(0)
Je reçois l'erreur:
"errorType": "ClientError",
"errorMessage": "An error occurred (ValidationException) when calling the Query operation: Query key condition not supported"
Selon cette ressource [1], "gt" est une méthode de clé(). Est-ce que quelqu'un sait si cette bibliothèque a été mise à jour, ou quelles sont les autres méthodes disponibles autres que "eq"?
[1] http://boto3.readthedocs.io/en/latest/reference/customizations/dynamodb.html#ref-dynamodb-conditions
EDIT ---------- ---------
Je viens aussi essayé l'ancienne méthode utilisant:
response = client.query(
TableName = 'Table_Name',
IndexName='Custom_Index',
KeyConditions = {
'Custom_Number_Attribute':{
'ComparisonOperator':'EQ',
'AttributeValueList': [{'N': '0'}]
}
}
)
Cela a fonctionné, mais lorsque je tente:
response = client.query(
TableName = 'Table_Name',
IndexName='Custom_Index',
KeyConditions = {
'Custom_Number_Attribute':{
'ComparisonOperator':'GT',
'AttributeValueList': [{'N': '0'}]
}
}
)
... cela ne fonctionne pas. Pourquoi l'EQ serait-elle la seule méthode qui fonctionnerait dans ces cas? Pourquoi? Je ne suis pas sûr de ce qui me manque dans la documentation.
supposons faire référence à cette documentation: http://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html#DynamoDB.Client.query – mootmoot