如何在 python 中使用 NDB 查询从数据存储中删除数据?
How to delete data from datastore using NDB query in python?
我有这样的数据:
{
"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 的新手。
嗯,你不是 "building" 正确的钥匙。密钥应使用实体种类及其 ID/name(如果您知道)来构建。来自 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/name。
您显示的实体似乎属于 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。
我有这样的数据:
{
"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 的新手。
嗯,你不是 "building" 正确的钥匙。密钥应使用实体种类及其 ID/name(如果您知道)来构建。来自 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/name。
您显示的实体似乎属于 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。