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
Google app engine Can';t删除google app engine中的数据存储实体_Google App Engine_Google Cloud Datastore_App Engine Ndb_Google App Engine Python - Fatal编程技术网

Google app engine Can';t删除google app engine中的数据存储实体

Google app engine Can';t删除google app engine中的数据存储实体,google-app-engine,google-cloud-datastore,app-engine-ndb,google-app-engine-python,Google App Engine,Google Cloud Datastore,App Engine Ndb,Google App Engine Python,我尝试以两种不同的方式删除所有数据存储实体,但出现错误: 尝试1: results = myDS().query().fetch() for res in results: res.delete() 尝试2: results = myDS().query().fetch() ndb.delete_multi(results) 在这两种情况下,它都失败了,我得到了错误: 服务器遇到错误,无法完成您的请求 知道为什么吗?在从查询中获得的结果中,您有实际的实体 在第一次尝试中,要删除实体,

我尝试以两种不同的方式删除所有数据存储实体,但出现错误:

尝试1:

results = myDS().query().fetch()
for res in results:
    res.delete()
尝试2:

results = myDS().query().fetch()
ndb.delete_multi(results)
在这两种情况下,它都失败了,我得到了错误:

服务器遇到错误,无法完成您的请求


知道为什么吗?

在从查询中获得的
结果中,您有实际的实体

在第一次尝试中,要删除实体,需要在实体的键上而不是实体本身上调用
.delete()
,另请参见:

类似地,在第二次尝试中,您需要将实体键而不是实体传递到
ndb.delete_multi()
,另请参见:

但在这两种情况下,直接从查询中获取实体键更有效(实际上不需要实体本身来删除它们)。它也更便宜,因为您将跳过数据存储读取操作。您的尝试如下所示:

keys = myDS().query().fetch(keys_only=True)
for key in keys:
    key.delete()

keys = myDS().query().fetch(keys_only=True, limit=500)  # up to 500 keys at a time
ndb.delete_multi(keys)

@Dan Cornilescu的问题被编辑为我的尝试和错误消息
ndb.delete_multi([r.key for r in results])
keys = myDS().query().fetch(keys_only=True)
for key in keys:
    key.delete()

keys = myDS().query().fetch(keys_only=True, limit=500)  # up to 500 keys at a time
ndb.delete_multi(keys)