我已尝试根据我的需要在此处的答案中清理和修改代码,我只想从模型中删除Reservations
在 get as 中表示的日期之前的数据记录yy,mm,dd
。
如果我正确地预测了cleanTable/2012/10/5
针对路由的操作,('/cleanTable/([\d]+)/([\d]+)/([\d]+)', CleanTable)
那么我的代码最多只会删除 50 (10*nlimit) 个数据记录。
顺便说一句,原始代码的作者(他可能不再订阅 SO)声称他完成此代码的主要技巧是“在 html 中包含重定向而不是使用 self.redirect”。
我对之类的东西不熟悉raise Exception
,但我的直觉是在 for 循环中添加一个raise Exception
orraise StopIteration
在它变成一个 while 循环之后。但我不清楚引发 StopIteration 异常是否真的会导致迭代停止,或者是否需要更多。另外,我不知道如何修改,以便 html 在提前退出时顺利结束。
class CleanTable(BaseHandler):
def get(self, yy,mm,dd):
nlimit=5
iyy=int(yy)
imm=int(mm)
idd=int(dd)
param=date(iyy,imm,idd)
q=Reservations.all(keys_only=True)
q.filter("date < ", dt(iyy,imm,idd))
results = q.fetch(nlimit)
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write("""
<html>
<meta HTTP-EQUIV="REFRESH" content="url=http://yourapp.appspot.com/cleanTable">
<body>""")
try:
for i in range(10):
db.delete(results)
results = q.fetch(nlimit, len(results))
for r in results:
logging.info("r.name: %s" % r.name)
self.response.out.write("<p> "+str(nlimit)+" removed</p>")
self.response.out.write("""
</body>
</html>""")
except Exception, inst:
logging.info("inst: %s" % inst)
self.response.out.write(str(inst))