Google App Engine NDB - “更新或插入(如果不存在)”

时间:2013-09-11 20:40:56

标签: google-app-engine app-engine-ndb

我正在尝试相当于“更新或插入(如果不存在)”。

知道怎么做吗?我能想到的唯一解决方案是执行GQL查询,然后更新返回的记录,或者如果查询没有返回任何记录,则创建一个新记录。

这种方法不是原子的 - 但我想知道是否有一种“简单”的方法来做到这一点。

2 个答案:

答案 0 :(得分:2)

如果您有密钥,只需获取,更新并放入交易中。在GAE的数据存储区中没有“更新”操作,它只是读取实体,并编写实体。

答案 1 :(得分:2)

没有这样的原子操作。您需要使用交易。

如何阅读文档,db和ndb都有一个方法来获取或插入'这是事务性的,然后您将值更新/应用于事务内的属性,然后写入(put())实体。

https://developers.google.com/appengine/docs/python/ndb/modelclass#Model_get_or_insert

还要记住,查询结果必须遵循"最终"一致性,除非它们是祖先查询。

详细了解交易https://developers.google.com/appengine/docs/python/ndb/transactions