1

新しい peewee の機能であるcommit_on_successデコレータについて自問自答しています。

  1. 関数が「成功」したかどうかはどのように判断されますか?

  2. このデコレーターを使用する場合save()、変更されたオブジェクトを呼び出す必要がありますか?

私が試したことから、#2はYESだと思いますが、peeweeのドキュメントでこれら2つの質問に対する明確な答えが見つからないので、確認したいだけです.

4

1 に答える 1

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')

その関数のどこかで例外が発生した場合、送金は行われず、例外が発生します。

それ以外の場合、例外が発生しなければ、送金され、応答が返されます。

于 2012-09-09T23:37:40.753 に答える