0

我是 app-engine [Python 2.7] 的新手,我想从我的 ndb 中删除元素(目前我不在乎它是一个一个还是全部一次,因为没有一个对我有用)。

基于此 Q的版本 1 :

ps_ancestors = req_query.fetch()
for ps_ancestor in ps_ancestors:
  self.response.write(ps_ancestor.key)
  ps_ancestor.key.delete()

它继续打印相同的数据而不实际删除任何内容

版本 2:[myId 当前只有值 1,2,3]

ndb.Key(myId, 1).delete()
ndb.Key(myId, 2).delete()  
ndb.Key(myId, 3).delete()

该模型:

class tmpReport (ndb.Model):
    myId = ndb.IntegerProperty()
    hisId = ndb.IntegerProperty()
    date = ndb.DateTimeProperty(auto_now_add=True)

我错过了什么?

4

3 回答 3

2
k = users.query(users.name == 'abhinav')
for l in k.fetch(limit = 1):
    l.key.delete()
于 2015-07-07T09:12:02.283 回答
0

首先,您不应该将实体键定义为 IntegerProperty。看看这个文档:NDB Entities and Keys

为了从数据存储中删除实体,您应该首先使用查询或其 ID 检索它。我建议您在创建实体时使用“键名”(将其用作您的自定义 ID):

   # Model declaration
   class tmpReport (ndb.Model):
       hisId = ndb.IntegerProperty()
       date = ndb.DateTimeProperty(auto_now_add=True)

# Store the entity
   report = tmpReport(id=1, hisId=5)
   report.put()

然后检索和删除以前的实体使用:

# Retrieve entity
report = ndb.Key("tmpReport", 1).get()
# Delete the entity
report.key.delete()

希望能帮助到你。

于 2013-06-18T16:05:01.083 回答
0
query1 = tmpReport.query()
query2 = query1.filter(tmpReport.myId == int(myId)) 
#Add other filters as necessary 
query3 = query2.fetch()
query3[0].key.delete()

假设 myID 是唯一的,则删除返回的第一个实体(元素),因此列表中只有一个元素。

于 2019-03-12T04:11:15.917 回答