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

时间:2018-12-02 09:09:22

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

我有这样的数据:

[X,Y,Z]

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

{
  "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"
}

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

1 个答案:

答案 0 :(得分:3)

好吧,您没有正确地“构建”密钥。密钥应使用实体种类及其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)

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

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

如果要删除多个实体,则使用ndb.delete_multi()效率更高,请参见Deleting entities in bulk