数据库的结构我像链一样构建它,它看起来像这样: Click here to see the structure
这些部分是: Click here to see what represents each part
所以,当我想在我的链中添加新数据时: Click here to see the new data coming ,在我想要的任何地方,我可以通过更新结构的datastore.key轻松更新它们的值:click here to see the update
所以,在这种情况下,我只需要更新b.NextBlock,c.LastBlock,e.LastBlock和e.NextBlock,一切都很好,但我想我想添加更多新数据Click her to see new data coming 如果任何数据失败,我不想保存链 - 我该怎么办?
所以,在两种情况下都应该考虑使用“client.RunInTransaction”方法为每个新数据做正常事情,所以我保证一切都很好,但这不可能,因为我无法获得“数据存储” .key“当将数据附加到数据存储区”client.RunInTransaction“时,文档说https://godoc.org/cloud.google.com/go/datastore#Transaction.Put(它返回* PendingKey没有密钥本身),我需要在”client.RunInTransaction“之外才能获得”数据存储区“。关键字“元素”和“提交”文档说https://godoc.org/cloud.google.com/go/datastore#Commit.Key
所以,我希望函数“put”进入“client.RunInTransaction”,当代码在“client.RunInTransaction”中时,给我关键元素,之后没有,所以我可以保证更新一切正常,因为如果我有密钥,下一个附加可能会失败,我不希望我的数据保存它
答案 0 :(得分:1)
首先分别创建新数据实体,以获取其密钥。此时NextBlock
和django 1.11
属性仍为空。
只有在您拥有实体密钥后才能使用该事务在列表中执行实体的插入,在该列表中您只更新该实体以及上一个和下一个实体的密钥引用(如果有的话)在其中插入实体。