繁体   English   中英

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

[英]How to delete data from datastore using NDB query in python?

我有这样的数据:

{
  "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的新手。

好吧,你没有正确地“建立”钥匙。 应使用实体种类及其ID /名称(如果您知道的话)构建密钥。 指定您自己的密钥名称

 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'被指定为密钥的ID /名称。

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

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

  • 实体的id值看起来像一个密钥的urlsafe字符串:

    "id": "aghkZXZ-Tm9uZXIZCxIMUXVlcnlIaXN0b3J5GICAgICAyOsKDA"

  • 有一个nid值,看起来像数据存储区自动生成的数字键ID

    "nid": 6102564412063744

如果是这样,那么nid实际上是你的密钥ID,所以你要像这样构建你的密钥:

ndb.Key(Account, nid)

你也可以使用:

ndb.Key(urlsafe=id)

但是,如果您实际拥有该实体,例如,从查询结果中,您不再需要构建其密钥来执行删除,您可以直接从实体获取密钥并将其删除如下:

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

如果要删除多个实体,则使用ndb.delete_multi()更有效,请参阅批量删除实体

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM