zvvq技术分享网

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

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

内容来自samhan666

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

内容来自zvvq

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

zvvq.cn

- email (primary key)

zvvq好,好zvvq

- password (attribute) 内容来自samhan

- rname (attribute)

copyright zvvq

我正在使用 aws go sdk v1 来实现仅使用数据库主键执行查询: copyright zvvq

我要解组的结构是: 内容来自samhan666

typeitemstruct{

本文来自zvvq

emailstring`json:"email"`

内容来自zvvq

passwordstring`json:"password"` 内容来自samhan

rnamestring`json:"rname"`

zvvq好,好zvvq

}

zvvq好,好zvvq

和代码: 内容来自samhan

result,err:=client.Query(&dynamodb.QueryInput{

zvvq

TableName:aws.String("accountsTable"),

zvvq

KeyConditions:map[string]*dynamodb.Condition{

zvvq.cn

"email":{

内容来自zvvq,别采集哟

ComparisonOperator:aws.String("EQ"),

zvvq好,好zvvq

AttributeValueList:[]*dynamodb.AttributeValue{

内容来自samhan666

{ copyright zvvq

S:aws.String(email),

zvvq.cn

},

zvvq好,好zvvq

},

zvvq

},

内容来自zvvq

}, 内容来自samhan666

}) 本文来自zvvq

iferr!=nil{

内容来自zvvq,别采集哟

returnfalse,err zvvq

} 内容来自samhan666

item:=[]Item{} zvvq

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

zvvq

iferr!=nil{

内容来自zvvq

returnfalse,err

内容来自samhan

} copyright zvvq

但是,我收到密钥无效的问题。我检查数据库中的密钥,它也与我打印到控制台的密钥相匹配。 内容来自zvvq,别采集哟

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

zvvq.cn

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

内容来自zvvq,别采集哟

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

typeitemstruct{ copyright zvvq

emailstring`json:"email"dynamodbav:"email,omitempty"`

内容来自samhan

passwordstring`json:"password"dynamodbav:"password,omitempty"` 本文来自zvvq

rnamestring`json:"rname"dynamodbav:"rname,omitempty"` 内容来自samhan666

}

zvvq.cn

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

zvvq好,好zvvq

packagemain 内容来自samhan

import( copyright zvvq

"github.com/aws/aws-sdk-go/aws" zvvq好,好zvvq

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

内容来自samhan666

"github.com/aws/aws-sdk-go/service/dynamodb" zvvq.cn

"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute"

内容来自samhan

"fmt" 内容来自samhan

)

zvvq

funcmain(){

内容来自zvvq,别采集哟

//createsession copyright zvvq

sess:=session.must(session.newsessionwithoptions(session.options{ zvvq好,好zvvq

sharedconfigstate:session.sharedconfigenable, 内容来自zvvq

}))

zvvq.cn

//create dynamodb clientwithlogging

内容来自zvvq,别采集哟

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

zvvq好,好zvvq

typeitemstruct{ 内容来自samhan

emailstring`dynamodbav:"email"`

本文来自zvvq

passwordstring`dynamodbav:"password,omitempty"`

本文来自zvvq

rnamestring`dynamodbav:"rname,omitempty"`

本文来自zvvq

}

内容来自samhan666

result,err:=client.query(&dynamodb.queryinput{ 内容来自zvvq

tablename:aws.string("accountstable"),

内容来自samhan

keyconditions:map[string]*dynamodb.condition{ 内容来自zvvq

"email":{ 内容来自zvvq

comparisonoperator:aws.string("eq"), copyright zvvq

attributevaluelist:[]*dynamodb.attributevalue{

zvvq.cn

{ 内容来自samhan666

s:aws.string("[email protected]"),

copyright zvvq

}, copyright zvvq

},

zvvq好,好zvvq

},

本文来自zvvq

},

zvvq好,好zvvq

}) 内容来自zvvq

iferr!=nil{ 内容来自samhan

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

fmt.println((err.error())) 内容来自samhan666

}

copyright zvvq

for_,i:=rangeresult.items{ zvvq

item:=item{}

本文来自zvvq

err=dynamodbattribute.unmarshalmap(i,&item)

内容来自zvvq,别采集哟

iferr!=nil{ 内容来自zvvq

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

} zvvq好,好zvvq

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

内容来自zvvq

fmt.println()

copyright zvvq

}

内容来自samhan666

}

zvvq.cn

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

内容来自zvvq,别采集哟

packagemain

copyright zvvq

import(

zvvq

"fmt"

内容来自samhan

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

copyright zvvq

"github.com/aws/aws-sdk-go/aws/session" copyright zvvq

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

内容来自samhan

"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute"

内容来自samhan666

)

内容来自zvvq,别采集哟

funcmain(){

内容来自zvvq

//ItemtoGet

内容来自samhan

typeItemstruct{

zvvq

Emailstring`dynamodbav:"email"`

zvvq.cn

Passwordstring`dynamodbav:"password,omitempty"`

zvvq.cn

Rnamestring`dynamodbav:"rname,omitempty"` 内容来自samhan

} copyright zvvq

//CreateSession

copyright zvvq

sess:=session.Must(session.NewSessionWithOptions(session.Options{

本文来自zvvq

SharedConfigState:session.SharedConfigEnable, 本文来自zvvq

}))

zvvq

//CreateDynamoDBClient zvvq.cn

client:=dynamodb.New(sess,aws.NewConfig()) 内容来自zvvq

//GetItem zvvq

result,err:=client.GetItem(&dynamodb.GetItemInput{ 内容来自zvvq,别采集哟

TableName:aws.String("accountsTable"), 本文来自zvvq

Key:map[string]*dynamodb.AttributeValue{ 内容来自zvvq

"email":{

内容来自zvvq

S:aws.String("[email protected]"), copyright zvvq

}, 内容来自samhan666

},

内容来自samhan666

}) 内容来自zvvq,别采集哟

//CatchError

内容来自zvvq,别采集哟

iferr!=nil{

内容来自samhan666

fmt.Println("GetItemAPIcallfailed:")

本文来自zvvq

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

}

内容来自zvvq

item:=Item{} zvvq

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

err=dynamodbattribute.UnmarshalMap(result.Item,&item)

内容来自samhan

iferr!=nil{ 本文来自zvvq

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

内容来自samhan

} 内容来自samhan

//IfItemReturnsEmpty 内容来自samhan666

ifitem.Email==""{ zvvq

fmt.Println("CouldnotfindItem") copyright zvvq

return

内容来自zvvq

} 本文来自zvvq

//PrintResult

zvvq.cn

fmt.Println("Founditem:")

内容来自zvvq,别采集哟

fmt.Println("Email:",item.Email)

本文来自zvvq

} copyright zvvq

以上就是如何修复Query dynamodb请求的错误?的详细内容,更多请关注其它相关文章!

zvvq