app-engine ndb删除数据

时间:2013-06-18 05:41:13

标签: python-2.7 app-engine-ndb

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

版本1基于this Q

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)

我错过了什么?

3 个答案:

答案 0 :(得分:1)

k = users.query(users.name == 'abhinav')
for l in k.fetch(limit = 1):
    l.key.delete()

答案 1 :(得分:0)

首先,您不应将Entity键定义为IntegerProperty。请查看此文档:NDB Entities and Keys

要从数据存储中删除实体,您应首先使用查询或ID来检索它。我建议您在创建实体时使用“keyname”(将其用作自定义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()

希望它有所帮助。

答案 2 :(得分:0)

query1 = tmpReport.query()
query2 = query1.filter(tmpReport.myId == int(myId)) 
#Add other filters as necessary 
query3 = query2.fetch()
query3[0].key.delete()

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