首页 > 编程 > Python > 正文

使用Python的Django框架实现事务交易管理的教程

2020-02-23 00:48:39
字体:
来源:转载
供稿:网友

 如果你花费了很多的时间去进行Django数据库事务处理的话,你将会了解到这是让人晕头转向的。

在过去,只是提供了简单的基础文档,要想清楚知道它是怎么使用的,还必须要通过创建和执行Django的事务处理。

这里有众多的Django事务处理的名词,例如:commit_on_success , commit_manually , commit_unless_maneged,rollback_unless_managed,enter_transaction_management,leace_transaction_management,这些只是其中的一部分而已。

最让人感到幸运的是,Django 1.6版本发布后。现在你可以紧紧使用几个函数就可以实现事务处理了,在我们进入学习这些函数的几秒之前。首先,我们要明确下面这些问题:

    什么是事务处理呢?     Django 1.6中的出现了那些新的事物处理优先权?

在进入“要怎么才是Django 1.6版本中正确的事务处理”之前,请先了解一下下面的详细案例:

    带状案例

    事务

            推荐的方式             使用分隔符             每一个HTTP请求事务

    保存点

    嵌套的事务


事务是什么?

根据SQL-92所说,"一个SQL事务(有时简称为事务)是一个可以原子性恢复的SQL语句执行序列"。换句话说,所有的SQL语句一起执行和提交。同样的,当回滚时,所有语句也一并回滚。

例如:
 

# STARTnote = Note(title="my first note", text="Yay!")note = Note(title="my second note", text="Whee!")address1.save()address2.save()# COMMIT

所以一个事务是 数据库中单个的工作单元。它是由一个start transaction开始和一个commit或者显式的rollback结束。

Django 1.6之前的事务管理有什么问题?

为了完整地回答这个问题,我们必须阐述一下事务在数据库、客户端以及Django中是如何处理的。

数据库

数据库中的每一条语句都运行在一个事务中,这个事务甚至可以只包含一条语句。

几乎所有的数据库都有一个AUTOCOMMIT设置,通常它被默认设置为True。AUTOCOMMIT将所有语句包装到一个事务里,只要语句成功执行,这个事务就立即被提交。当然你也可以手动调用START_TRANSACTION,它会暂时将AUTOCOMMIT挂起,直到你调用COMMIT_TRANSACTION或者ROLLBACK。

然后,这种方式将会使AUTOCOMMIT设置的作用于每条语句后的隐式提交失效。


然而,有诸如像sqlite3和mysqldb的python客户端库,它允许python程序与数据库本身相连接。这些库遵循一套如何访问与查询数据库的标准。该DB API 2.0标准,被描述在PEP 249之中。虽然它可能让人阅读稍干一些。一个重要带走的是,在PEP 249状态之中,默认数据库应该关闭自动提交功能。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表