无法删除google-app-engine中的数据存储区实体

时间:2018-06-09 17:16:20

标签: 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 个答案:

答案 0 :(得分:0)

在从您的查询中获得的results中,您拥有实际的实体。

在第一次尝试中,要删除实体,您需要在实体的密钥上调用.delete(),而不是在实体本身,请参阅Deleting entities

res.key.delete()

同样,在第二次尝试中,您需要将实体密钥而非实体传递给ndb.delete_multi(),另请参阅Using batch operations

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)