我在dynamodb
中创建了一个表格“ Blog”。
我想在其中插入要从HTML表单中获取的2个参数“标题” 和“内容” 。
当我在控制台中打印这两个参数时,参数“ blogContent” 和“ blogTitle” 似乎有效。
但是当我将它们插入表中时,出现错误:
“一个或多个参数值无效:项目中缺少键ID 状态码:400,请求ID:71CT5IPM1SIDKSDVUGWGUCSJ77VV4KQNSO5ZAMVJF66Q9ASUAAJG”
type Item struct {
id int
content string
bodycontentversion string
claps int
comments int
imageid int
title string
views int
}
func awsblog() {
sess, err := session.NewSession(&aws.Config{
Region: aws.String("us-east-1")},
)
svc := dynamodb.New(sess)
item := Item{
id: 1234,
content: blogContent,
bodycontentversion: "abcd",
claps: 5,
comments: 10,
imageid: 1234,
title: blogTitle,
views: 10,
}
av, err := dynamodbattribute.MarshalMap(item)
if err != nil {
fmt.Println("Got error marshalling new item:")
fmt.Println(err.Error())
os.Exit(1)
}
tableName := "Blog"
input := &dynamodb.PutItemInput{
Item: av,
TableName: aws.String(tableName),
}
_, err = svc.PutItem(input)
if err != nil {
fmt.Println("Got error calling PutItem:")
fmt.Println(err.Error())
os.Exit(1)
}
fmt.Println("Successfully updated '")
}
答案 0 :(得分:0)
结构字段必须是公共的,MarshalMap
才能发挥作用。
添加一个fmt.Printf("marshalled struct: %+v", av)
以查看该函数的输出。
除非您向结构字段添加json:"field-name"
指令,否则这将要求DynamoDB字段大写。
结果将是:
type Item struct {
Id int `json:"id"`
Content string `json:"content"`
Bodycontentversion string `json:"bodycontentversion"`
Claps int `json:"claps"`
Comments int `json:"comments"`
Imageid int `json:"imageid"`
Title string `json:"title"`
Views int `json:"views"`
}
答案 1 :(得分:0)
将带有boto3 Python包的物品放进去时,我有同样的错误。
ClientError: An error occurred (ValidationException) when calling the PutItem operation: One or more parameter values were invalid: Missing the key id in the item
问题是插入时我没有正确指定分区键。我在下面错误地指定了PARTITION_KEY。我拼写了错误的变量名(下面的第一行),这导致了错误,但从错误消息中无法立即看到该错误。
PARTTION_KEY = 'hello'
SORT_KEY = 'world'
dynamodb = boto3.client('dynamodb')
dynamodb.put_item(
TableName=TABLE,
Item={
PARTITION_KEY: {'S': 'my-part-key'},
SORT_KEY: {'S': 'my-sort-key'},
}
)