0

我已经阅读了 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 将与提交一起工作,但是在导入事务之前,函数 1 会发生什么?function1 将应用什么类型的事务?我希望 function1 没有任何事务,但在其他模型代码中工作时表现正常,那么我该怎么办?

所以我的问题是,如果没有交易但有一种交易方法,该怎么办?它会通过使用装饰器和其他方法正常工作还是我需要做其他事情?这些事务是否也依赖于数据库和数据库存储引擎,如 InnoDB 这些事务只是 Django 内部事务?

4

1 回答 1

0
  • Django 使用数据库事务。
  • 您无需更改数据库存储引擎。
  • 并非所有数据库引擎都支持事务
  • 如果你使用事务管理,而你的数据库引擎不支持它(例如 MySQL 和 MyISAM 表),一切仍然有效,没有事务。

即在一种方法中使用@commit_on_success 是安全的。如果您将来在没有事务支持的情况下更改为 DB,什么都不会中断。

于 2013-01-13T07:52:50.197 回答