我在质疑自己关于新 peewee 的功能:commit_on_success
装饰器。
如何判断函数是否“成功”?
如果我使用这个装饰器,我需要调用
save()
我改变的对象吗?
根据我的尝试,我认为 #2 是肯定的,但我只是想确定,因为我在 peewee 的文档中找不到这两个问题的明确答案。
我认为您所说的装饰器实际上是被调用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')
如果在该函数中的任何地方引发异常,则不会转移任何资金并且将引发异常。
否则,如果没有引发异常,则会转移资金并返回响应。