【发布时间】:2013-12-02 21:26:32
【问题描述】:
多年来,我已经习惯了使用 Django
After reading the docs on the new API,我仍然不确定以下代码将如何提交到数据库:
def a_first_function():
with transaction.atomic():
a_second_function_successful()
a_third_function_fails()
def a_second_function_successful():
with transaction.atomic():
do_something()
def a_third_function_fails():
do_something_wrong()
在此示例中,假设从 a_first_function 调用的 a_second_function_successful 成功并从模型创建/保存对象。在这个 second_function 成功后,立即调用第三个函数并失败。
鉴于使用上下文管理器的 transaction.atomic 在第一个和第二个函数中都使用了,在 a_second_function_successful 中创建/修改的数据会发生什么。它会被提交到数据库吗?它会从第一个函数自动回滚吗?我的经验是,无论如何都会提交第二个函数,但是,我希望它不会被提交。
如果第三个函数定义如下,现在会有什么不同吗:
@transaction.atomic
def a_third_function_fails():
do_something_wrong()
或作为:
def a_third_function_fails():
with transaction.atomic():
do_something_wrong()
谢谢,
【问题讨论】:
标签: django django-models transactions django-database