了解Django事务的工作

时间:2013-01-12 19:51:28

标签: django django-models transactions

我已经阅读过Django交易并将在我的项目中使用它,但这里有一些我想知道的问题。实际上我想在注册时使用事务,我在注册时在2-3个位置插入,所以我想如果任何查询失败,那么就不应该执行插入。所以根据Django文档,我想我需要使用commit_on_success类型的事务。

但我想知道这些交易是依赖于数据库还是Django内部的所有内容?我是否需要更改数据库存储引擎?如果我必须在不同的存储引擎上使用它,甚至将来在不同的数据库中使用它,例如SQL中的一个表和nosql中的一个表,该怎么办?或者这没关系?

此外,如果我将使用它:

from django.db import transaction

def function1():
    #code here without transaction

@commit_on_success
def function2():
    #code here with transaction

如果所有方法代码都成功,那么函数2将使用commit,但是在导入事务之前,function1会发生什么?什么类型的交易将在function1上应用?我希望function1没有任何事务,但行为正常,因为它在其他模型的表单代码中工作,所以我该怎么办?

所以我的问题是,如果没有交易,每件事情都能正常运行但是有一种方法可以进行交易吗?是否可以通过使用装饰器和其他方法正常运行或我需要做其他事情?这些交易是否依赖于像InnoDB这样的数据库和数据库存储引擎,这些交易只是Django的内部交易吗?

1 个答案:

答案 0 :(得分:0)

  • Django使用数据库事务。
  • 您无需更改数据库存储引擎。
  • 并非所有数据库引擎都具有交易功能
  • 如果您在数据库引擎不支持时使用事务管理(例如带有MyISAM表的MySQL),一切仍然有效,没有事务。

即。在一个方法中使用@commit_on_success是安全的。如果您将来在没有交易支持的情况下更改为DB,那么什么都不会破坏。