django-控制mysql事物

时间:2023-03-10 01:40:30
django-控制mysql事物

from django.db import transaction

两种方式控制事务:为了保持数据一致性

  一个Book表,一个Author表。添加一本书,也要保证添加作者。By事物控制

  book = Book.object.get(id=1) # 单个Book.object

  book.字段.find('a') # 查询该字段是否包含'a' ,不包含返回 -1,包含返回 >=0

一:装饰器

只能装饰app下的View中的def方法。

@transaction.atomic
def forTransaction(request):
""" 事物装饰器transaction.atomic """
author = Author.objects.create(name='xixi1')
book = Book.objects.create(headline='练习事物22')
author.book.add(book)
   author,save()
# assert not book.headline.find("事物") >=0, "敏感信息"
if book:
raise Exception("强行错误") # 有错误就都不执行 return HttpResponse("ojbk")

 二:使用上下文管理器的方式

在view中,使用 with transaction.atomic():

class ForTransaction(View):
''' 使用上下文管理器,管理事务 '''
def get(self, request):
with transaction.atomic():
author = Author.objects.create(name='haha1')
book = Book.objects.create(headline='upDown')
author.book.add(book) # add 多对多关系使用
author.save()
assert not book.headline.find("up") >=0, "敏感信息" #包含‘up’返回>=0的值,则报错。 有错误就都不执行
return HttpResponse('ojbk')