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