我正在尝试执行相当于“更新或插入(如果不存在)”的操作。
知道怎么做吗?我能想到的唯一解决方案是执行 GQL 查询,然后更新返回的记录,或者如果查询没有返回记录,则创建一个新记录。
这种方法不会是原子的——但我想知道是否有一种“简单”的方法来做到这一点。
我正在尝试执行相当于“更新或插入(如果不存在)”的操作。
知道怎么做吗?我能想到的唯一解决方案是执行 GQL 查询,然后更新返回的记录,或者如果查询没有返回记录,则创建一个新记录。
这种方法不会是原子的——但我想知道是否有一种“简单”的方法来做到这一点。
没有这样的原子操作。您需要使用事务。
如何阅读文档,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
如果您有密钥,只需获取、更新并放入事务中。GAE 的数据存储中没有“更新”操作,它只是读取实体,然后写入实体。