ZVVQ代理分享网

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

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

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

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

- email (primary key)

- password (attribute)

- rname (attribute)

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

我要解组的结构是:

typeitemstruct{

emailstring`json:"email"`

passwordstring`json:"password"`

rnamestring`json:"rname"`

}

和代码:

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

TableName:aws.String("accountsTable"),

KeyConditions:map[string]dynamodb.Condition{

"email":{

ComparisonOperator:aws.String("EQ"),

AttributeValueList:[]dynamodb.AttributeValue{

{

S:aws.String(email),

},

},

},

},

})

iferr!=nil{

returnfalse,err

}

item:=[]Item{}

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

iferr!=nil{

returnfalse,err

}

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

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

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

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

typeitemstruct{

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

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

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

}

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

packagemain

import(

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

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

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

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

"fmt"

)

funcmain(){

//createsession

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

sharedconfigstate:session.sharedconfigenable,

}))

//create dynamodb clientwithlogging

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

typeitemstruct{

emailstring`dynamodbav:"email"`

passwordstring`dynamodbav:"password,omitempty"`

rnamestring`dynamodbav:"rname,omitempty"`

}

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

tablename:aws.string("accountstable"),

keyconditions:map[string]dynamodb.condition{

"email":{

comparisonoperator:aws.string("eq"),

attributevaluelist:[]dynamodb.attributevalue{

{

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

},

},

},

},

})

iferr!=nil{

fmt.println("queryapicallfailed:")

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

}

for_,i:=rangeresult.items{

item:=item{}

err=dynamodbattribute.unmarshalmap(i,&item)

iferr!=nil{

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

}

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

fmt.println()

}

}

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

packagemain

import(

"fmt"

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

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

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

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

)

funcmain(){

//ItemtoGet

typeItemstruct{

Emailstring`dynamodbav:"email"`

Passwordstring`dynamodbav:"password,omitempty"`

Rnamestring`dynamodbav:"rname,omitempty"`

}

//CreateSession

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

SharedConfigState:session.SharedConfigEnable,

}))

//CreateDynamoDBClient

client:=dynamodb.New(sess,aws.NewConfig())

//GetItem

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

TableName:aws.String("accountsTable"),

Key:map[string]dynamodb.AttributeValue{

"email":{

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

},

},

})

//CatchError

iferr!=nil{

fmt.Println("GetItemAPIcallfailed:")

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

}

item:=Item{}

//Unmarhsall

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

iferr!=nil{

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

}

//IfItemReturnsEmpty

ifitem.Email==""{

fmt.Println("CouldnotfindItem")

return

}

//PrintResult

fmt.Println("Founditem:")

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

}

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