【问题标题】:Can't delete Datastore entities in google-app-engine无法删除 google-app-engine 中的 Datastore 实体
【发布时间】:2018-06-09 17:16:19
【问题描述】:

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

尝试1:

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

尝试2:

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

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

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

知道为什么吗?

【问题讨论】:

  • @Dan Cornilescu 问题已用我的尝试和错误消息进行编辑

标签: google-app-engine google-cloud-datastore app-engine-ndb google-app-engine-python


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多