gpt4 book ai didi

go - 无法让 GetItem 与 goamz dynamodb 一起正常工作

转载 作者:IT王子 更新时间:2023-10-29 01:41:52 28 4
gpt4 key购买 nike

我正在关注 this教程,并使用 Python 设置表格,我可以使用 Python 获取项目,但不能使用 golang。我做错了什么?

我制作的表格是这样的(几乎是从教程中复制粘贴):

from __future__ import print_function # Python 2/3 compatibility
import boto3

dynamodb = boto3.resource('dynamodb', region_name='us-west-2')

table = dynamodb.create_table(
TableName='Movies',
KeySchema=[
{
'AttributeName': 'year',
'KeyType': 'HASH' #Partition key
},
{
'AttributeName': 'title',
'KeyType': 'RANGE' #Sort key
}
],
AttributeDefinitions=[
{
'AttributeName': 'year',
'AttributeType': 'N'
},
{
'AttributeName': 'title',
'AttributeType': 'S'
},

],
ProvisionedThroughput={
'ReadCapacityUnits': 10,
'WriteCapacityUnits': 10
}
)

我像这样加载数据(在 Python 中):

my_item = {"year": 1999, "title": "MyMovie", "info": {"Plot": "DynamoDB"}}
table.put_item(Item=my_item)

当我读取数据时(用 Python):

response = table.get_item(Key={"year":1999,
"title":"MyMovie",
}
)
print response

我的输出是:

{u'Item': {u'info': {u'Plot': u'DynamoDB'}, u'year': Decimal('1999'), u'title': u'MyMovie'}, 'ResponseMetadata': {'RetryAttempts': 0, 'HTTPStatusCode': 200, 'RequestId': 'C8I2Q46K06T030INBCFN35RELVVV4KQNSO5AEMVJF66Q9ASUAAJG', 'HTTPHeaders': {'x-amzn-requestid': 'C8I2Q46K06T030INBCFN35RELVVV4KQNSO5AEMVJF66Q9ASUAAJG', 'content-length': '93', 'server': 'Server', 'connection': 'keep-alive', 'x-amz-crc32': '4025342458', 'date': 'Wed, 02 Nov 2016 18:20:14 GMT', 'content-type': 'application/x-amz-json-1.0'}}}

我的 golang 代码:

package main

import (
"fmt"
"github.com/goamz/goamz/aws"
"github.com/goamz/goamz/dynamodb"
)


func main() {

access_key := "MyAccessKey"
secret_key := "MySecretKey"

auth := aws.Auth{AccessKey: access_key, SecretKey: secret_key}

server := &dynamodb.Server{Auth: auth, Region: aws.USWest2}

desc_ptr, err := server.DescribeTable("Movies")

if err != nil {
fmt.Println(err)
}

primary_key, err := desc_ptr.BuildPrimaryKey()

if err != nil {
fmt.Println(err)
}

table := server.NewTable("Movies", primary_key)

my_key := dynamodb.Key{HashKey: "1999", RangeKey: "MyMovie"}

result, err := table.GetItem(&my_key)

if err != nil {
fmt.Println(err)
}

fmt.Println("Printing Result")

for k, v := range(result) {
fmt.Println(k, *v)
}
}

结果:

Printing Result
title {S title MyMovie [] }
year {N year 1999 [] }

除了我提供的 titleyear 之外,这里缺少所有内容。我错过了什么?

编辑:

我的 go 版本:

go version go1.7.3 linux/amd64

我不知道我的 goamz 版本是什么,但我很确定我在 master 的尖端。

最佳答案

我认为这可能是 goamz 库中的错误。 parseAttribute 函数具有解析不同数据类型的逻辑。但是,它似乎不适用于 MAP、LIST、BOOL 等数据类型。

根据我的观察,字符串、数字和 SS 数据类型工作正常。如果你可以添加一个非关键字符串属性并执行程序。您应该在结果中获得该属性。

goamz item go source code for reference

关于go - 无法让 GetItem 与 goamz dynamodb 一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387845/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com