昨日のエントリーでは、データを登録する方法を書いたので、今日は、トランザクション処理について。
import cgi from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app from google.appengine.ext import db
#データモデル class PaintingData(db.Model): personalid = db.StringProperty()
def insert_data(*args): #トランザクションの実行 paintingdata = PaintingData() paintingdata.personalid = args[0].request.get("personalid") #コミットをかける paintingdata.put()
class StoringData(webapp.RequestHandler): def post(self): # print self.request.get("hoge")
try: db.run_in_transaction(insert_data,self) except: print "エラーが発生しました。"
#データを表示する def get(self): paintingdata = db.GqlQuery("SELECT * FROM PaintingData") for each_paintingdata in paintingdata: self.response.out.write("<div>personalid:%s</div>" % each_paintingdata.personalid)
application = webapp.WSGIApplication( [('/paint/storingdata', StoringData)] , debug=True )
def main(): run_wsgi_app(application)
if __name__ == "__main__": main() |
db.run_in_transactionファンクションの使い方がわからなかったため、ちょっとてこずりました。
リファレンスを読むと第一引数は、関数の名前なのはすぐにわかったのですが、第二引数と第三引数に悩みました。
初めてのPythonを参考にすると、「*args」は、引数をタプルで受け取り、「**kargs」は、ディクショナリで受け取ると書いてあったので、今回は、タプルで渡したいと思い、第三引数を何も指定せずに、関数の設定を行ったところ、きちんと正常動作しました。
呼び出される関数(第一引数)の引数もタプルで設定してあるため、db.run_in_transactionの第二引数がそっくりそのまま引き渡される形になります。
後は、例外処理を細かく書いていけばオッケーかなーっと。
0 コメント:
コメントを投稿