内容来自zvvq
php小编鱼仔为您呈现:如何修复Query dynamodb请求的错误?DynamoDB是亚马逊提供的一种高度可扩展的NoSQL数据库服务。在使用DynamoDB进行查询时,可能会遇到各种错误,影响系统的正常运行。要修复这些错误,首先需要仔细检查查询语句的正确性,并确保提供的参数和表结构匹配。另外,还可以通过增加Read Capacity来提高查询性能,使用合适的索引来优化查询速度。此外,了解并遵循DynamoDB的最佳实践,如合理使用批量操作和条件表达式等,也能有效避免查询错误。通过以上方法,您可以轻松修复和优化DynamoDB查询中的错误,提高系统的稳定性和性能。
问题内容在 dynamodb 中,我有一个表,其中包含:
- email (primary key) 内容来自samhan
- password (attribute)
- rname (attribute) 内容来自samhan
我正在使用 aws go sdk v1 来实现仅使用数据库主键执行查询: 内容来自samhan666
我要解组的结构是:
内容来自zvvq,别采集哟
typeitemstruct{ 内容来自samhan666
emailstring`json:"email"` zvvq好,好zvvq
passwordstring`json:"password"` zvvq.cn
rnamestring`json:"rname"` zvvq
} zvvq.cn
和代码:
result,err:=client.Query(&dynamodb.QueryInput{ zvvq
TableName:aws.String("accountsTable"),
zvvq好,好zvvq
KeyConditions:map[string]dynamodb.Condition{
内容来自zvvq
"email":{
内容来自samhan666
ComparisonOperator:aws.String("EQ"), 本文来自zvvq
AttributeValueList:[]dynamodb.AttributeValue{ 本文来自zvvq
{ 内容来自samhan
S:aws.String(email), copyright zvvq
},
zvvq好,好zvvq
}, zvvq
},
}, 内容来自samhan
}) 内容来自samhan666
iferr!=nil{ zvvq好,好zvvq
returnfalse,err zvvq.cn
}
item:=[]Item{}
err=dynamodbattribute.UnmarshalListOfMaps(result.Items,&item) zvvq
iferr!=nil{ 内容来自zvvq
returnfalse,err
} copyright zvvq
但是,我收到密钥无效的问题。我检查数据库中的密钥,它也与我打印到控制台的密钥相匹配。
zvvq.cn
不知道如何解决这个问题,因为我看到的示例似乎适用于他们的并且看起来相同。
任何解决此问题的帮助将不胜感激:) copyright zvvq
解决方法您需要将密码和 rname 的值设置为 omitempty,以便它不会设置为空值,因为它们不是键,它们不应包含在查询中,因为它会引发无效键异常:
内容来自samhan
typeitemstruct{ 内容来自zvvq,别采集哟
emailstring`json:"email"dynamodbav:"email,omitempty"` 内容来自samhan666
passwordstring`json:"password"dynamodbav:"password,omitempty"`
rnamestring`json:"rname"dynamodbav:"rname,omitempty"`
内容来自samhan666
} 本文来自zvvq
更新我认为问题是由于您尝试将整个响应编组到单个命令中,但是,迭代对我有用。(我不使用 go)。
zvvq好,好zvvq
packagemain
zvvq好,好zvvq
import(
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
内容来自zvvq,别采集哟
"github.com/aws/aws-sdk-go/service/dynamodb" 内容来自zvvq,别采集哟
"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute"
本文来自zvvq
"fmt" zvvq.cn
) 内容来自samhan666
funcmain(){ zvvq.cn
//createsession
sess:=session.must(session.newsessionwithoptions(session.options{
sharedconfigstate:session.sharedconfigenable, 内容来自samhan
})) 内容来自zvvq
//create dynamodb clientwithlogging
client:=dynamodb.new(sess,aws.newconfig())
typeitemstruct{
zvvq.cn
emailstring`dynamodbav:"email"`
zvvq.cn
passwordstring`dynamodbav:"password,omitempty"` zvvq.cn
rnamestring`dynamodbav:"rname,omitempty"`
} 内容来自zvvq,别采集哟
result,err:=client.query(&dynamodb.queryinput{
内容来自zvvq
tablename:aws.string("accountstable"), zvvq.cn
keyconditions:map[string]dynamodb.condition{ 内容来自samhan666
"email":{ zvvq.cn
comparisonoperator:aws.string("eq"), 内容来自samhan666
attributevaluelist:[]dynamodb.attributevalue{ 内容来自samhan666
{
内容来自samhan666
s:aws.string("[email protected]"), 内容来自zvvq,别采集哟
}, zvvq.cn
},
},
},
}) 内容来自samhan666
iferr!=nil{
fmt.println("queryapicallfailed:") 内容来自samhan666
fmt.println((err.error())) 内容来自zvvq,别采集哟
} 本文来自zvvq
for_,i:=rangeresult.items{
item:=item{} zvvq
err=dynamodbattribute.unmarshalmap(i,&item) 内容来自samhan
iferr!=nil{ zvvq
fmt.println("goterrorunmarshalling:%s",err)
内容来自zvvq,别采集哟
}
fmt.println("email:",item.email)
fmt.println()
内容来自samhan
} 内容来自samhan666
} zvvq好,好zvvq
此外,当您使用 email 的单个密钥时,这意味着最多有 1 个项目具有相同的电子邮件地址,这意味着您应该使用 getitem 而不是 query:
zvvq
packagemain zvvq好,好zvvq
import(
内容来自samhan
"fmt"
"github.com/aws/aws-sdk-go/aws" 内容来自zvvq,别采集哟
"github.com/aws/aws-sdk-go/aws/session"
本文来自zvvq
"github.com/aws/aws-sdk-go/service/dynamodb"
内容来自zvvq,别采集哟
"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute"
) zvvq
funcmain(){ 内容来自zvvq,别采集哟
//ItemtoGet 内容来自zvvq,别采集哟
typeItemstruct{ 内容来自zvvq
Emailstring`dynamodbav:"email"`
Passwordstring`dynamodbav:"password,omitempty"` 内容来自zvvq,别采集哟
Rnamestring`dynamodbav:"rname,omitempty"`
}
内容来自zvvq
//CreateSession
zvvq好,好zvvq
sess:=session.Must(session.NewSessionWithOptions(session.Options{
copyright zvvq
SharedConfigState:session.SharedConfigEnable, 内容来自zvvq,别采集哟
}))
copyright zvvq
//CreateDynamoDBClient
内容来自samhan666
client:=dynamodb.New(sess,aws.NewConfig())
//GetItem copyright zvvq
result,err:=client.GetItem(&dynamodb.GetItemInput{
TableName:aws.String("accountsTable"), 内容来自samhan
Key:map[string]dynamodb.AttributeValue{
zvvq好,好zvvq
"email":{
内容来自samhan666
S:aws.String("[email protected]"), 内容来自samhan666
}, 内容来自samhan666
},
})
zvvq
//CatchError
iferr!=nil{ zvvq.cn
fmt.Println("GetItemAPIcallfailed:")
fmt.Println((err.Error())) 内容来自samhan
} 本文来自zvvq
item:=Item{} zvvq好,好zvvq
//Unmarhsall
err=dynamodbattribute.UnmarshalMap(result.Item,&item) 内容来自samhan
iferr!=nil{
内容来自zvvq
panic(fmt.Sprintf("FailedtounmarshalRecord,%v",err)) zvvq好,好zvvq
} 本文来自zvvq
//IfItemReturnsEmpty
ifitem.Email==""{ zvvq.cn
fmt.Println("CouldnotfindItem") zvvq.cn
return copyright zvvq
} 本文来自zvvq
//PrintResult 本文来自zvvq
fmt.Println("Founditem:") 内容来自samhan666
fmt.Println("Email:",item.Email) 内容来自zvvq,别采集哟
} copyright zvvq
以上就是如何修复Query dynamodb请求的错误?的详细内容,更多请关注其它相关文章! zvvq.cn