python - 如何在 python 中使用 NDB 查询从数据存储中删除数据?
问题描述
我有这样的数据:
{
"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()
,请参阅批量删除实体。
推荐阅读
- python - Python套接字-一台服务器的多个客户端,连接错误或线程错误?
- python - 如何在多维 nparray 中仅调整一维的大小?
- android - 我想删除 Firebase Auth 上的选定用户
- node.js - 如何使用 GKE 和 kubernetes/client-node 通过 K8S API 进行身份验证?
- spring-boot - 我们如何在单个服务器中部署多个 mico 服务
- c# - IndexBuilder 和 ForNpgsqlHasComment
- php - 如何优化数据库查询并减少对数据的请求数
- asterisk - 带有 ChanSpy() 的星号背景音乐
- vb.net - OleDbException 是来自子句的未处理语法错误
- spring-boot - Spring-boot应用程序中的Logback,两次初始化同一个appender