新しい peewee の機能であるcommit_on_success
デコレータについて自問自答しています。
関数が「成功」したかどうかはどのように判断されますか?
このデコレーターを使用する場合
save()
、変更されたオブジェクトを呼び出す必要がありますか?
私が試したことから、#2はYESだと思いますが、peeweeのドキュメントでこれら2つの質問に対する明確な答えが見つからないので、確認したいだけです.
あなたが意味するデコレータは実際には呼び出さcommit_on_success
れ、Database
クラスのメソッドとして実装されていると思います。
アイデアは、リクエスト/レスポンスでいくらかのお金を送金したいとします。これは本当にばかげた例です:
db = SqliteDatabase('my_database.db')
@db.commit_on_success
def process_transfer_request(request, from_id, to_id, amount):
from_acct = Account.get(id=from_id)
to_acct = Account.get(id=to_id)
from_acct.balance -= amount
to_acct.balance += amount
from_acct.save()
to_acct.save()
return Response('success! the money was transferred')
その関数のどこかで例外が発生した場合、送金は行われず、例外が発生します。
それ以外の場合、例外が発生しなければ、送金され、応答が返されます。