Я использую Lambda (Python) для запроса моей базы данных DynamoDB. Я использую библиотеку boto3, и мне удалось сделать «эквивалентный» запрос:
Этот скрипт работает:
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
Однако, когда я меняю выражение запроса на это:
KeyConditionExpression=Key('Number_Attribute').gt(0)
Я получаю сообщение об ошибке:
"errorType": "ClientError",
"errorMessage": "An error occurred (ValidationException) when calling the Query operation: Query key condition not supported"
Согласно этому [1] ресурсу, «gt» - это метод Key (). Кто-нибудь знает, обновлялась ли эта библиотека или какие еще методы доступны кроме "eq"?
[1] http://boto3.readthedocs.io/en/latest/reference/customizations/dynamodb.html#ref-dynamodb-conditions
--------- РЕДАКТИРОВАТЬ ----------
Я также просто попробовал старый метод, используя:
response = client.query(
TableName = 'Table_Name',
IndexName='Custom_Index',
KeyConditions = {
'Custom_Number_Attribute':{
'ComparisonOperator':'EQ',
'AttributeValueList': [{'N': '0'}]
}
}
)
Это сработало, но когда я пытаюсь:
response = client.query(
TableName = 'Table_Name',
IndexName='Custom_Index',
KeyConditions = {
'Custom_Number_Attribute':{
'ComparisonOperator':'GT',
'AttributeValueList': [{'N': '0'}]
}
}
)
...это не работает.
Почему в таких случаях работает только эквалайзер? Я не уверен, что мне не хватает в документации.