Python transaction.atomic是否也包含被调用的函数?
我正在使用Django/cellery,我想知道我的create函数中的Python transaction.atomic是否也包含被调用的函数?,python,django,Python,Django,我正在使用Django/cellery,我想知道我的create函数中的transaction.atomic是否也包含被调用的函数(createUserTenant) 这是一个示例(如您所见,我正在调用createUserTenant,其中包含一些查询): 如你所见,我这里有一些交易 @shared_task def createUserTenant(userid, current_schema): state = True try: with schema_co
transaction.atomic
是否也包含被调用的函数(createUserTenant
)
这是一个示例(如您所见,我正在调用createUserTenant
,其中包含一些查询):
如你所见,我这里有一些交易
@shared_task
def createUserTenant(userid, current_schema):
state = True
try:
with schema_context(current_schema):
addUserInTeam = Team.objects.create(user = CustomUser.objects.get(pk=userid))
with schema_context('public'):
userInQuestion = CustomUser.objects.get(id=userid)
# create your first real tenant
tenant = Client(
schema_name=str(userInQuestion.username),
name=userInQuestion.first_name + '_' + userInQuestion.last_name,
paid_until='2014-12-05',
on_trial=True)
tenant.save()
# migrate_schemas automatically called, your tenant is ready to be used!
# Add one or more domains for the tenant
domain = Domain()
domain.domain = str(userInQuestion.username) + settings.BASE_URL # tx.domain.com
domain.tenant = tenant
domain.is_primary = False
domain.save()
except:
state = False
return state
否,装饰器仅将函数
create
包装在事务块中,并且还可以嵌套事务。事务块不会在事务中自动包装父块。您需要在任务中创建事务,以确保create
之外的代码正在事务中运行
详情如下:
一种方法是:
from django.db import transaction
@shared_task
def createUserTenant(userid, current_schema):
with transaction.atomic():
# your code
# ....
from django.db import transaction
@shared_task
def createUserTenant(userid, current_schema):
with transaction.atomic():
# your code
# ....