python - 如何在Python中使用NDB查询从数据存储中删除数据?

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

我有这样的数据:

{
  "queryValue": "SELECT Name, Site, Phone, Type, Owner.Name, CreatedBy.profile.Name FROM Account",
  "SFDCUser_id": "0056F00000ALw6aQAD",
  "updated_at": "2018-11-18T07:26:24.954000",
  "id": "aghkZXZ-Tm9uZXIZCxIMUXVlcnlIaXN0b3J5GICAgICAyOsKDA",
  "is_error": false,
  "nid": 6102564412063744,
  "date": "2018-11-18T07:26:24.954000",
  "created_at": "2018-11-18T07:26:24.954000"
}

我正在使用 id 从数据存储中删除特定记录。我的代码是这样的:

ndb.Key('id',id).delete()

但它不能正常工作,我是 python 新手。

最佳答案

嗯,你没有正确“构建” key 。应使用实体种类及其 ID/名称(如果您知道)来构建 key 。来自 Specifying your own key name :

account.key = ndb.Key('Account', 'sandy@example.com')

# You can also use the model class object itself, rather than its name,
# to specify the entity's kind: 
account.key = ndb.Key(Account, 'sandy@example.com')

但该示例假设在创建实体时将 'sandy@example.com' 指定为 key 的 ID/名称。

您显示的实体似乎属于 Account 类型(或者至少是您查询的实体),而不是 id 类型。因此,您应该像引用的示例中一样构建 key (它们的实体类型也被命名为 Account)。

此外,您的实体似乎没有使用指定的实体 ID:

  • 实体的 id 值看起来像键的 urlsafe 字符串:

    “id”:“aghkZXZ-Tm9uZXIZCxIMUXVlcnlIaXN0b3J5GICAgICAyOsKDA”

  • 有一个 nid 值,看起来像数据存储 auto-generated numeric key ID :

    “nid”:6102564412063744

如果是这样,那么 nid 实际上是您的 key ID,因此您可以像这样构建 key :

ndb.Key(Account, nid)

您还可以使用:

ndb.Key(urlsafe=id)

但是如果你确实有实体,例如从查询结果来看,你不再需要构建它的 key 来执行删除,你可以直接从实体中获取 key 并删除它,如下所示:

for entity in ndb.query(...).fetch(...):
    entity.key.delete()

如果要删除多个实体,使用 ndb.delete_multi() 会更有效,请参阅 Deleting entities in bulk .

关于python - 如何在Python中使用NDB查询从数据存储中删除数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53578884/

相关文章:

android - 将图像从 Android 上传到 GAE 数据存储

java - 必须从 Blob 上传回调请求中调用

kubernetes - 为什么我们需要一个负载均衡器来使用 ingress 暴露 kubernetes 服务?

javascript - 通过 javascript 尝试 gcloud 函数命令时 json 无效

python - 将终端输出重定向到 tkinter

python - 在感知器学习模型的 Python 实现中将数组传递给 numpy.dot()

python - 跨平台部署,安装方便

python - 在 Django 中导入 global/app lib 文件夹

google-app-engine - 如何在 MapReduce 作业中创建具有父键或字符串 ID 的新实体?

scala - GKE 上 docker 中的 scala 应用程序未终止系统