get as で表される日付より前のデータレコードのモデルからのみ削除したいというニーズに合わせて、ここでの回答のコードをクリーンアップして修正しようとしました。Reservations
yy,mm,dd
cleanTable/2012/10/5
ルーティングに対するアクションを正しく予測している場合('/cleanTable/([\d]+)/([\d]+)/([\d]+)', CleanTable)
、私のコードは最大 50 (10*nlimit) のデータ レコードしか削除しません。
ところで、元のコードの作成者 (SO に加入していない可能性が高い) は、このコードを達成するための主なトリックは、「self.redirect を使用する代わりに html にリダイレクトを含めること」であると主張しました。
などはよくわからないraise Exception
のですが、本能的にfor ループを while ループにしたあとにraise Exception
orをつけてしまいます。raise StopIteration
しかし、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))