Лямбда, добавление ключа сортировки вызывает сбой - PullRequest
1 голос
/ 16 марта 2020

У меня есть следующая лямбда-функция, которую я использую по запросу DynamoDB:

def lambda_handler(event, context):

    #query vars
    coursenameVar = event['query']['coursenameVar']
    lessonVar = event['query']['lessonVar']

    # make the connection to dynamodb
    dynamodb = boto3.resource('dynamodb')

    # select the table
    table = dynamodb.Table("testai")

    # query and response
    response = table.query(
    KeyConditionExpression=Key('coursename').eq(coursenameVar) & Key('lesson').eq(lessonVar))
    data = response['Items']
    return data

В таблице БД есть два ключа:

Primary partition key   coursename (String)
Primary sort key    lesson (Number)

Функция проста; он берет два параметра запроса из URL через API-шлюз и использует их в качестве ключей KeyConditionExpression для запроса следующим образом:

KeyConditionExpression=Key('coursename').eq(coursenameVar) & Key('lesson').eq(lessonVar))

Проблема:

Все работает, пока я В запросе используется только первичный ключ раздела:

KeyConditionExpression=Key('coursename').eq(coursenameVar)

Но как только я добавляю ключ сортировки следующим образом:

KeyConditionExpression=Key('coursename').eq(coursenameVar) & Key('lesson').eq(lessonVar))

Я получаю следующую ошибку:

  "errorMessage": "An error occurred (ValidationException) when calling the Query operation: One or more parameter values were invalid: Condition parameter type does not match schema type",
  "errorType": "ClientError",

Примечание: мой ключ сортировки - цифра c - я где-то пропустил объявление типа? Любые другие мысли приветствуются.

1 Ответ

0 голосов
/ 16 марта 2020

Похоже, вам может понадобиться преобразовать поле lessonVar из строки в целое число, например:

Key('lesson').eq(int(lessonVar)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...