无法删除 google-app-engine 中的 Datastore 实体

Can't delete Datastore entities in google-app-engine

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

尝试 1:

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

尝试 2:

results = myDS().query().fetch()
ndb.delete_multi(results)

在这两种情况下都失败了,我得到了错误:

The server encountered an error and could not complete your request.

知道为什么吗?

在从您的查询中获得的 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)