• 怎样使用数据库事务处理
    • 问题:
    • 解决:

    怎样使用数据库事务处理

    问题:

    怎样使用数据库事务处理?

    解决:

    数据库对象有一个方法“transaction”,将启动一个新的事务,并返回事务对象。这个事务对象可以使用commit提交事务或rollback来回滚事务。

    1. import web
    2. db = web.database(dbn="postgres", db="webpy", user="foo", pw="")
    3. t = db.transaction()
    4. try:
    5. db.insert('person', name='foo')
    6. db.insert('person', name='bar')
    7. except:
    8. t.rollback()
    9. raise
    10. else:
    11. t.commit()

    在python 2.5+以上的版本,事务同样可以在段中使用:

    1. from __future__ import with_statement
    2. db = web.databse(dbn="postgres", db="webpy", user="foo", pw="")
    3. with db.transaction():
    4. db.insert('person', name='foo')
    5. db.insert('person', name='bar')

    它同样可能有一个嵌套的事务:

    1. def post(title, body, tags):
    2. t = db.transaction()
    3. try:
    4. post_id = db.insert('post', title=title, body=body)
    5. add_tags(post_id, tags)
    6. except:
    7. t.rollback()
    8. else:
    9. t.commit()
    10. def add_tags(post_id, tags):
    11. t = db.transaction()
    12. try:
    13. for tag in tags:
    14. db.insert('tag', post_id=post_id, tag=tag)
    15. except:
    16. t.rollback()
    17. else:
    18. t.commit()

    嵌套的事务在sqlite中将被忽略,因为此特性不被sqlite支持。