@commit_on_success和save()

时间:2012-08-31 09:58:39

标签: sqlite peewee

我在质疑新的peewee的功能:commit_on_success装饰。

  1. 如何确定该功能是否“成功”?

  2. 如果我使用这个装饰器,我是否需要在我改变的对象上调用save()

  3. 根据我的尝试,我认为#2是肯定的,但我只是想确定,因为我在peewee的文档中找不到这两个问题的明确答案。

1 个答案:

答案 0 :(得分: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')

如果在该职能中任何地方提出异常,则不会转移任何款项,并且会引发例外。

否则,如果没有引发异常,将转移资金并返回响应。