gpt4 book ai didi

google-app-engine - 创建子记录时抛出无效 key 消息

转载 作者:IT王子 更新时间:2023-10-29 01:42:13 25 4
gpt4 key购买 nike

我在使用帐户的父 key 时保存程序记录时遇到问题。

此代码因错误“无效 key ”而失败(完整信息请参见底部):

key := datastore.NewIncompleteKey(ctx, "programs", actKey)
_, err = datastore.Put(ctx, key, &Program{Name: names[i]})

这通过了:

key := datastore.NewIncompleteKey(ctx, "programs", nil)
_, err = datastore.Put(ctx, key, &Program{Name: names[i]})

完整代码:

    // insert test account
actKey := datastore.NewIncompleteKey(ctx, "accounts", nil)
_, err = datastore.Put(ctx, actKey, &Account{Name: "Chris Olsenio"})
if err != nil {
log.Errorf(ctx, "Insert test account %v", err.Error())
c.AbortWithError(http.StatusInternalServerError, err)
return
}

var names = []string {"Low Impact", "Running"}
for i := 0; i < len(names); i++ {
key := datastore.NewIncompleteKey(ctx, "programs", actKey)
_, err = datastore.Put(ctx, key, &Program{Name: names[i]})
if err != nil {
log.Errorf(ctx, "Insert test programs %v", err.Error())
c.AbortWithError(http.StatusInternalServerError, err)
return
}
}

最佳答案

问题是当您创建一个不完整的 key 时:

actKey := datastore.NewIncompleteKey(ctx, "accounts", nil)

用于保存实体的:

_, err = datastore.Put(ctx, actKey, &Account{Name: "Chris Olsenio"})

它有效,但请注意,如果传递的 key 是不完整的 key (在您的情况下),datastore.Put() 会返回一个由数据存储生成的新的唯一 key 。您不存储返回的新 key ,但您应该存储!

当您尝试创建和保存“程序” 实体时:

key := datastore.NewIncompleteKey(ctx, "programs", actKey)

datastore.NewIncompleteKey() 需要一个 nil 父键,如果提供的话,它必须是一个完整键(不能不完整)。您传递了 actKey,这是一个不完整的 key ,因此出现了 “invalid key” 错误消息。

解决方案很简单:存储生成的新 key ,并将新的完整 key 作为父 key 传递:

actKey := datastore.NewIncompleteKey(ctx, "accounts", nil)
actKey, err = datastore.Put(ctx, actKey, &Account{Name: "Chris Olsenio"})

如果 errnilactKey 现在将是一个完整的 key ,因此在使用 创建其他 key 时可以用作父 key code>datastore.NewIncompleteKey()datastore.NewKey()

关于google-app-engine - 创建子记录时抛出无效 key 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36762197/

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