Django在交易结束前提交到数据库

问题描述:

我使用Django 1.10和Postgres数据库以及django-rest-framework。我调试我的代码,无论我在哪里some_entity.save(),我立即看到数据库中的变化。问题是我有ATOMIC_REQUESTS = True,这意味着在视图成功完成之前没有任何东西被提交到数据库。我现在很担心数据库的完整性 - 如果后来发生异常,没有东西会回滚Django在交易结束前提交到数据库

+1

当您说“立即看到db中的更改”时,您的意思是什么?从目前的交易中,这是可以预料的。 –

+0

嗯,我的意思是我在调试模式下进行线对线。每当我通过任何保存方法时,数据立即在数据库中更新。我希望它会在交易结束时承诺。如果不是,如果发生异常,交易将如何回滚? –

您所描述的是数据库事务的完美预期行为。

随着ATOMIC_REQUESTS = True每个请求被包装在一个数据库事务中,这意味着一个事务在接收到请求时开始并且在没有问题产生响应之后提交。

在交易过程中,您可以阅读自己的写作:这就是SQL数据库的工作方式(相反会令人困惑)。

尽管在大多数配置中,这些写入是“隔离的”:如果它们还没有提交,它们将不会从并发请求(在不同的事务中)看到。有关事务隔离的更多详细信息,请参阅postgresql文档:https://www.postgresql.org/docs/current/static/transaction-iso.html

+0

谢谢,虽然这对我来说很奇怪。我习惯了JPA和Hybernate在一个我工作的项目上。在那里,直到交易实施之前,什么都看不到。要么他们这样工作,要么项目配置如此,否则我会误导/误认。 –