"Приведенный ключевой элемент не соответствует ошибке схемы" при получении элемента из DynamoDB
Это настройка ключа раздела таблицы
![введите описание изображения здесь]()
Содержимое таблицы
![введите описание изображения здесь]()
Когда я попытался получить элемент из таблицы, он печатает эту ошибку
botocore.exceptions.ClientError: произошла ошибка (ValidationException) при вызове операции GetItem: предоставленный ключевой элемент не соответствует схеме
Это мой код
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('testDynamodb')
response = table.get_item(Key={'userId': "user2873"})
item = response['Item']
print(item)
Любые идеи? спасибо.
Ответы
Ответ 1
В вашей табличной схеме определены как хеш-ключ, так и ключ сортировки. При использовании DynamoDB GetItem вы должны предоставить оба из них, вот выдержка из документации
Для первичного ключа вы должны предоставить все атрибуты. За Например, с простым первичным ключом вам нужно только указать значение для ключа раздела. Для составного первичного ключа вы должны предоставить значения для ключа раздела и ключа сортировки.
Итак, учитывая ваш пример, вот как должны выглядеть параметры get_item:
response = table.get_item(Key={'userId': "user2873", 'createdAt': "1489376547"})
Ответ 2
Еще одна вещь, которая работает, это следующий код ниже:
from boto3.dynamodb.conditions import Key
result = table.query(
KeyConditionExpression=Key('userId').eq('user2873')
)
Ответ 3
Я думаю, вам не нужно помещать все связанные атрибуты
в моем случае у меня есть только один PK как col
const AWS = require('aws-sdk');
const ddb = new AWS.DynamoDB.DocumentClient();
exports.handler = (event, context, callback) => {
const connectionId = event.requestContext.connectionId;
deleteConnectionId(connectionId).then(() => {
callback(null, { statusCode: 200 , message: 'userId deleted'});
});
};
function deleteConnectionId(connectionId) {
return ddb
.delete({ TableName: 'your table name',
Key: {
userId : connectionId.toString() // userId is my PK in this case
}
} )
.promise();
}