我在DynamoDB中创建了一个表“user\u info”,其中有一个主哈希键“user\u id”(String),没有范围键。然后,我创建了2个AWS lambda函数来插入和查询项目。我可以将项目插入表中,但查询表时,它会返回:
ValidationException:提供的键元素与架构不匹配。
我的查询功能:
var params = {
Key: {
user_id:{
S: "usr1@s.com"
}
},
TableName: 'user_info',
ProjectionExpression: 'password'
};
dynamodb.getItem(params,
function(err, data) {
if (err) {
console.log("get item err." + err);
context.done('error','getting item from dynamodb failed: '+err);
}
else {
console.log('great success: '+JSON.stringify(data, null, ' '));
context.succeed('created user ' + event.user_id + ' successfully.');
}
});
我一直得到这个例外:
ValidationException: The provided key element does not match the schema
自从
1) 我只有一个哈希主键。
2)user_id定义为字符串。我真的不知道为什么会出现不匹配错误。
(与OP不同的场景)
当我尝试仅使用哈希键进行查询时,同样的错误也发生在我身上,而我的表同时具有哈希键和排序键。我删除了未使用的排序键,因为我不需要它,它解决了我的问题。
最后,我找到了答案。这不是关于params的格式,而是它之前的代码,我没有在我的问题中发布。当我替换
var doc = require('dynamodb-doc');
var dynamodb = new doc.DynamoDB();
具有
var doc = require('aws-sdk');
var dynamodb = new doc.DynamoDB();
异常消失。
为了进一步阐明发生这种情况的原因,您最初使用的是DynamoDB文档客户端,这样就不需要显式地将属性标记为“String”(S)或“Number”(N)等。因此,您的原始代码可以使用
var doc = require('dynamodb-doc');
var dynamodb = new doc.DynamoDB();
var params = {
Key: {
user_id: "usr1@s.com"
},
TableName: 'user_info',
ProjectionExpression: 'password'
};
请注意,包装“user_id”值的“S”已从上述代码中删除。后来,您使用“aws-sdk”切换回低级javascript sdk,因此带有“S”标签的代码最终可以工作。
我正在尝试使用AWS Lambda函数将csv数据从S3写入DynamoDB。我当前收到以下错误“BatchWriteItem操作:提供的键元素与架构不匹配”。 这个问题有快速解决办法吗? 错误如下所示: 调用BatchWriteItem操作时发生错误(ValidationExc0019):提供的键元素与模式不匹配:ClientError Traceback(最近的调用最后一次): 文件“/var
我正在尝试使用boto3从DynamoDB查询项目。 该表如下所示: DynamoDB表 我运行的代码是: 我错过了什么?
我在Boto3/DynamoDB BatchGetItem操作中遇到困难。我将非常感谢任何帮助或指导!我对python/aws非常陌生,如果这是一个新手问题,那么很抱歉在高级版。 当我执行该操作时,会出现以下错误: 这是我的代码: 这是表中项目的屏幕盖。 这是表详细信息的屏幕盖,显示分区键为'item_ID',是'string' 以下是完整的错误消息:
当我试图从表中获取项目时,它会打印此错误 botocore.exceptions.ClientError:调用GetItem操作时发生错误(ValidationException):提供的键元素与架构不匹配 这是我的密码 有什么想法吗?谢谢
我正在尝试更新Dynamodb表用户中的一项。我尝试了许多不同的方法,但总是收到相同的错误消息: 提供的键元素与架构不匹配 项目的创建与查询一样有效,但更新不起作用。当我在DynamoDB上检查时,用户创建得很好: 下面是表格信息: 表名:用户 主分区键:电子邮件(字符串) 主排序键:注册(编号) 下面是代码(从lambda调用): 你知道我的代码中可能有什么错误吗?
我正在尝试使用boto和python删除DynamoDB表中的大量项。我的表是用主键作为设备ID(想想MAC地址)设置的。表中有多个设备ID条目,因为主键是UNIX时间戳。 从我的阅读代码应该工作: 来源:http://docs.pythonboto.org/en/latest/dynamodb2_tut.html#batch-writing 但是,它返回“提供的键元素与架构不匹配”作为错误消息。