gpt4 book ai didi

python - Django 1.4 中的嵌套事务

转载 作者:行者123 更新时间:2023-11-30 22:48:58 24 4
gpt4 key购买 nike

为手动交易启用函数 A()。它有数据库事务并在出现任何错误时回滚。此函数调用另一个未启用手动事务但具有数据库事务的函数,在出现异常时也会引发错误。在这种情况下,父函数中的回滚是否会回滚被调用函数中的 db edit 语句??

我正在使用Mysql

import sys
import os

from polls.models import Choice
from django.db import transaction


def s1():
with transaction.commit_manually():
try:
print "First Fun"
choice_obj = Choice.objects.create(
choice_text="heyaa", votes='1', question_id='1')
s2()
transaction.commit()

except:
print "Roll Fun"
transaction.commit()
transaction.rollback()


def s2():

try:
print "Second Fun"
choice_obj = Choice.objects.create(
choice_text="abcaa", votes='1', question_id='1')
print a

except:
raise

最佳答案

是的,它也会回滚,但如果您首先在 except block 中提交它并且没有阻止提交的与数据库相关的异常,则不会。

数据库事务的定义(原子的、一致的、隔离的、持久的)阻止了它可以被嵌套。可以使用保存点(Django 1.6+ 使用)模拟一种嵌套事务,尽管这些不是真正的事务。在任何情况下,如果最外层的事务被回滚(即唯一真正的数据库事务),整个事务都会被回滚。

简单说明: 除了: 交易.commit()

这可能是任何异常的不良行为,但如果异常是将事务标记为已中断的数据库相关错误,这将引发另一个错误。在这种情况下,需要回滚。

关于python - Django 1.4 中的嵌套事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28710206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com