我有这样的数据:
[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的新手。
答案 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。