Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 谷歌应用程序引擎NDB-“;更新或插入(如果不存在)";_Google App Engine_App Engine Ndb - Fatal编程技术网

Google app engine 谷歌应用程序引擎NDB-“;更新或插入(如果不存在)";

Google app engine 谷歌应用程序引擎NDB-“;更新或插入(如果不存在)";,google-app-engine,app-engine-ndb,Google App Engine,App Engine Ndb,我正在尝试做“更新或插入(如果不存在)”的等效操作 你知道怎么做吗?我能想到的唯一解决方案是执行GQL查询,然后更新返回的记录,或者如果查询没有返回任何记录,则创建一个新记录 这种方法不会是原子式的——但我想知道是否有一种“简单”的方法可以做到这一点。如果您有密钥,只需获取、更新并放入事务中即可。GAE的数据存储中没有“更新”操作,它只是读取实体,然后写入实体。没有原子操作。您需要使用事务 读文档怎么样?db和ndb都有一个“get或insert”方法,它是事务性的,然后你更新/应用事务中的属性

我正在尝试做“更新或插入(如果不存在)”的等效操作

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


这种方法不会是原子式的——但我想知道是否有一种“简单”的方法可以做到这一点。

如果您有密钥,只需获取、更新并放入事务中即可。GAE的数据存储中没有“更新”操作,它只是读取实体,然后写入实体。

没有原子操作。您需要使用事务

读文档怎么样?db和ndb都有一个“get或insert”方法,它是事务性的,然后你更新/应用事务中的属性值,然后写入(put())实体

还请记住,查询结果受“最终”一致性的约束,除非它们是祖先查询


了解更多有关交易的信息

1如何获取钥匙。我是否可以在知道字段的情况下“构建”它,或者我必须执行GQL查询#2-你所描述的东西本身并不是原子的。#1真的取决于。如果您使用您知道的某个标识符(即电子邮件地址)作为密钥,则您知道它。否则,您可能需要首先查询实体以获取密钥,然后在事务内部重新蚀刻#2操作本身不是原子的,需要放入事务中。另一方面,这就是你所需要做的。