【问题标题】:How to delete data from datastore using NDB query in python?如何在 python 中使用 NDB 查询从数据存储中删除数据?
【发布时间】:2019-05-03 20:51:56
【问题描述】:

我有这样的数据:

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

【问题讨论】:

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


    【解决方案1】:

    好吧,您没有正确“构建”密钥。应使用实体类型及其 ID/名称(如果您知道的话)来构建密钥。来自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' 指定为键的 ID/名称。

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

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

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

      "id": "aghkZXZ-Tm9uZXIZCxIMUXVlcnlIaXN0b3J5GICAgICAyOsKDA"

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

      "nid": 6102564412063744

    如果是这样,那么 nid 实际上是您的密钥 ID,因此您将像这样构建您的密钥:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 2019-05-01
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多