我已经阅读过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的内部交易吗?
答案 0 :(得分:0)
即。在一个方法中使用@commit_on_success是安全的。如果您将来在没有交易支持的情况下更改为DB,那么什么都不会破坏。