zvvq技术分享网

如何修复 Query dynamodb 请求的错误?(queens游戏)

作者:zvvq博客网
导读php小编鱼仔为您呈现:如何修复Query dynamodb请求的错误?DynamoDB是亚马逊提供的一种高度可扩展的NoSQL数据库服务。在使用DynamoDB进行查询时,可能会遇到各种错误,影响系统的正常运行

内容来自zvvq

php小编鱼仔为您呈现:如何修复Query dynamodb请求的错误?DynamoDB是亚马逊提供的一种高度可扩展的NoSQL数据库服务。在使用DynamoDB进行查询时,可能会遇到各种错误,影响系统的正常运行。要修复这些错误,首先需要仔细检查查询语句的正确性,并确保提供的参数和表结构匹配。另外,还可以通过增加Read Capacity来提高查询性能,使用合适的索引来优化查询速度。此外,了解并遵循DynamoDB的最佳实践,如合理使用批量操作和条件表达式等,也能有效避免查询错误。通过以上方法,您可以轻松修复和优化DynamoDB查询中的错误,提高系统的稳定性和性能。

内容来自zvvq

问题内容在 dynamodb 中,我有一个表,其中包含:

copyright zvvq

- email (primary key) 内容来自samhan

- password (attribute)

内容来自zvvq

- 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

和代码:

zvvq好,好zvvq

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

},

zvvq

}, 内容来自samhan

}) 内容来自samhan666

iferr!=nil{ zvvq好,好zvvq

returnfalse,err zvvq.cn

}

本文来自zvvq

item:=[]Item{}

内容来自zvvq,别采集哟

err=dynamodbattribute.UnmarshalListOfMaps(result.Items,&item) zvvq

iferr!=nil{ 内容来自zvvq

returnfalse,err

内容来自samhan666

} copyright zvvq

但是,我收到密钥无效的问题。我检查数据库中的密钥,它也与我打印到控制台的密钥相匹配。

zvvq.cn

不知道如何解决这个问题,因为我看到的示例似乎适用于他们的并且看起来相同。

内容来自samhan666

任何解决此问题的帮助将不胜感激:) copyright zvvq

解决方法您需要将密码和 rname 的值设置为 omitempty,以便它不会设置为空值,因为它们不是键,它们不应包含在查询中,因为它会引发无效键异常:

内容来自samhan

typeitemstruct{ 内容来自zvvq,别采集哟

emailstring`json:"email"dynamodbav:"email,omitempty"` 内容来自samhan666

passwordstring`json:"password"dynamodbav:"password,omitempty"`

zvvq好,好zvvq

rnamestring`json:"rname"dynamodbav:"rname,omitempty"`

内容来自samhan666

} 本文来自zvvq

更新我认为问题是由于您尝试将整个响应编组到单个命令中,但是,迭代对我有用。(我不使用 go)。

zvvq好,好zvvq

packagemain

zvvq好,好zvvq

import(

本文来自zvvq

"github.com/aws/aws-sdk-go/aws"

内容来自samhan666

"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

本文来自zvvq

sess:=session.must(session.newsessionwithoptions(session.options{

内容来自zvvq,别采集哟

sharedconfigstate:session.sharedconfigenable, 内容来自samhan

})) 内容来自zvvq

//create dynamodb clientwithlogging

内容来自samhan

client:=dynamodb.new(sess,aws.newconfig())

zvvq好,好zvvq

typeitemstruct{

zvvq.cn

emailstring`dynamodbav:"email"`

zvvq.cn

passwordstring`dynamodbav:"password,omitempty"` zvvq.cn

rnamestring`dynamodbav:"rname,omitempty"`

内容来自samhan666

} 内容来自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

},

zvvq

},

内容来自zvvq

},

内容来自zvvq,别采集哟

}) 内容来自samhan666

iferr!=nil{

copyright zvvq

fmt.println("queryapicallfailed:") 内容来自samhan666

fmt.println((err.error())) 内容来自zvvq,别采集哟

} 本文来自zvvq

for_,i:=rangeresult.items{

内容来自zvvq

item:=item{} zvvq

err=dynamodbattribute.unmarshalmap(i,&item) 内容来自samhan

iferr!=nil{ zvvq

fmt.println("goterrorunmarshalling:%s",err)

内容来自zvvq,别采集哟

}

zvvq

fmt.println("email:",item.email)

本文来自zvvq

fmt.println()

内容来自samhan

} 内容来自samhan666

} zvvq好,好zvvq

此外,当您使用 email 的单个密钥时,这意味着最多有 1 个项目具有相同的电子邮件地址,这意味着您应该使用 getitem 而不是 query:

zvvq

packagemain zvvq好,好zvvq

import(

内容来自samhan

"fmt"

内容来自samhan666

"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好,好zvvq

) zvvq

funcmain(){ 内容来自zvvq,别采集哟

//ItemtoGet 内容来自zvvq,别采集哟

typeItemstruct{ 内容来自zvvq

Emailstring`dynamodbav:"email"`

zvvq好,好zvvq

Passwordstring`dynamodbav:"password,omitempty"` 内容来自zvvq,别采集哟

Rnamestring`dynamodbav:"rname,omitempty"`

copyright zvvq

}

内容来自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())

zvvq.cn

//GetItem copyright zvvq

result,err:=client.GetItem(&dynamodb.GetItemInput{

内容来自zvvq,别采集哟

TableName:aws.String("accountsTable"), 内容来自samhan

Key:map[string]dynamodb.AttributeValue{

zvvq好,好zvvq

"email":{

内容来自samhan666

S:aws.String("[email protected]"), 内容来自samhan666

}, 内容来自samhan666

},

zvvq

})

zvvq

//CatchError

zvvq.cn

iferr!=nil{ zvvq.cn

fmt.Println("GetItemAPIcallfailed:")

zvvq

fmt.Println((err.Error())) 内容来自samhan

} 本文来自zvvq

item:=Item{} zvvq好,好zvvq

//Unmarhsall

zvvq

err=dynamodbattribute.UnmarshalMap(result.Item,&item) 内容来自samhan

iferr!=nil{

内容来自zvvq

panic(fmt.Sprintf("FailedtounmarshalRecord,%v",err)) zvvq好,好zvvq

} 本文来自zvvq

//IfItemReturnsEmpty

内容来自zvvq

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