zvvq技术分享网

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

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

zvvq

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

copyright zvvq

问题内容在 dynamodb 中,我有一个表,其中包含: 本文来自zvvq

- email (primary key)

内容来自zvvq,别采集哟

- password (attribute)

zvvq好,好zvvq

- rname (attribute)

内容来自samhan

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

本文来自zvvq

我要解组的结构是: 本文来自zvvq

typeitemstruct{ zvvq好,好zvvq

emailstring`json:"email"`

zvvq

passwordstring`json:"password"`

内容来自samhan

rnamestring`json:"rname"` 内容来自samhan666

}

内容来自zvvq,别采集哟

和代码:

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

内容来自zvvq,别采集哟

{

zvvq.cn

S:aws.String(email),

本文来自zvvq

}, 内容来自samhan666

}, copyright zvvq

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

}, 内容来自samhan

})

本文来自zvvq

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

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

zvvq.cn

解决方法您需要将密码和 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"`

zvvq好,好zvvq

}

内容来自zvvq

更新我认为问题是由于您尝试将整个响应编组到单个命令中,但是,迭代对我有用。(我不使用 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"

内容来自zvvq

"fmt"

copyright zvvq

)

内容来自zvvq,别采集哟

funcmain(){ zvvq

//createsession

本文来自zvvq

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

zvvq好,好zvvq

sharedconfigstate:session.sharedconfigenable, zvvq好,好zvvq

}))

zvvq.cn

//create dynamodb clientwithlogging

内容来自samhan

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

zvvq.cn

typeitemstruct{

本文来自zvvq

emailstring`dynamodbav:"email"` 内容来自zvvq

passwordstring`dynamodbav:"password,omitempty"`

zvvq好,好zvvq

rnamestring`dynamodbav:"rname,omitempty"`

内容来自samhan

}

zvvq

result,err:=client.query(&dynamodb.queryinput{ zvvq

tablename:aws.string("accountstable"),

内容来自zvvq

keyconditions:map[string]dynamodb.condition{

zvvq

"email":{

内容来自samhan666

comparisonoperator:aws.string("eq"),

本文来自zvvq

attributevaluelist:[]dynamodb.attributevalue{ 内容来自samhan

{ 本文来自zvvq

s:aws.string("[email protected]"), 内容来自samhan

},

内容来自samhan

}, copyright zvvq

},

内容来自samhan

},

内容来自zvvq

}) zvvq

iferr!=nil{

本文来自zvvq

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

fmt.println((err.error()))

zvvq好,好zvvq

}

内容来自samhan666

for_,i:=rangeresult.items{

内容来自zvvq

item:=item{}

zvvq好,好zvvq

err=dynamodbattribute.unmarshalmap(i,&item)

copyright zvvq

iferr!=nil{

内容来自samhan666

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

zvvq.cn

}

内容来自samhan666

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

本文来自zvvq

fmt.println()

copyright zvvq

}

zvvq.cn

} 内容来自samhan

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

packagemain

zvvq好,好zvvq

import(

zvvq.cn

"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"

内容来自zvvq

"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute" 本文来自zvvq

)

zvvq

funcmain(){

内容来自zvvq

//ItemtoGet 内容来自samhan

typeItemstruct{

copyright zvvq

Emailstring`dynamodbav:"email"`

本文来自zvvq

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

内容来自zvvq

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

},

内容来自zvvq,别采集哟

}, copyright zvvq

}) zvvq

//CatchError

zvvq好,好zvvq

iferr!=nil{ zvvq

fmt.Println("GetItemAPIcallfailed:")

本文来自zvvq

fmt.Println((err.Error()))

内容来自zvvq

}

copyright zvvq

item:=Item{}

内容来自samhan666

//Unmarhsall

内容来自zvvq,别采集哟

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:")

zvvq好,好zvvq

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

内容来自zvvq

} zvvq.cn

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

zvvq好,好zvvq