Как удалить данные из хранилища данных с помощью NDB-запроса в python? - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть такие данные:

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

И я использую идентификатор для удаления конкретной записи из хранилища данных.Мой код такой:

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

Но он не работает правильно, я новичок в Python.

1 Ответ

0 голосов
/ 02 декабря 2018

Ну, вы не "правильно строите" ключ.Ключ должен быть построен с использованием вида объекта и его идентификатора / имени (если вы его знаете).From Указание собственного имени ключа :

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' было указано как идентификатор / имя ключа при создании объекта.

Представляемая вами сущность имеет вид Account (или, по крайней мере, это то, к чему вы обращались), а не id.Таким образом, вы должны создать свой ключ, как в приведенном примере (вид их сущности также был назван Account).

Также не похоже, что для вашей сущности использовались указанные идентификаторы сущности:

Если так, то nid на самом деле ваш идентификатор ключатак что вы будете строить свой ключ следующим образом:

ndb.Key(Account, nid)

Вы также можете использовать:

ndb.Key(urlsafe=id)

Но если у вас действительно есть сущность, например, из результатов запроса,вам больше не нужно создавать его ключ для выполнения удаления, вы можете получить ключ непосредственно у сущности и удалить его следующим образом:

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

Если у вас есть несколько сущностей для удаления, его более эффективно использовать ndb.delete_multi(), см. Массовое удаление объектов .

...