客户A要给客户B转一笔钱,这个在数据库中需要进行两步: 1.客户A减钱 2.客户B加钱
如果在第一步结束后,服务器出现异常,停下了,第二步没有进行,如果数据库使用了事务操作,真的出现异常的时候,前面的操作会进行回滚。
简单的说就是:要么全部执行成功,要么一个都不执行
这个回滚的操作就叫做数据库的原子性操作。
这是在MySQL数据库中,我们在Django的ORM中如何进行呢?
2.通过ORM创建生成表 from django.db import models class UserInfo(models.Model): username = models.CharField("用户",max_length=32) balance = models.CharField("余额",max_length=32) 注意啊:踩过的坑,涉及金融计算,涉及小数啊,要求特别精确的,我们用字符串存储。 如果是金融计算的话,我们用一个decimal来进行计算。 3.我们给数据库加两条数据,用来模拟两个用户之间的转账 from django.shortcuts import render,HttpResponse from app01 import models from django.db import transaction from django.db.models import F def index(request): try: with transaction.atomic(): models.UserInfo.object.filter(id=1).update(balance=F("balance")-100) models.UserInfo.object.filter(id=2).update(balance=F("balance")+100) except Exception as e: return HttpResponse("出现错误<%s>"%str(e)) return HttpResponse("执行成功")