美文网首页
Django-使用事务处理多表联动数据

Django-使用事务处理多表联动数据

作者: 越大大雨天 | 来源:发表于2019-06-11 23:56 被阅读0次

Django事务介绍

  1. 以在Django中实现保存订单数据为例,涉及多张数据表的修改:增加订单数据及订单中包含的商品数据,减少商品表对应商品数量,增加商品销量。对这些数据的修改应该是一个整体,即要么都成功,要么都失败。
  2. Django中对于数据库的事务,默认每执行一句数据库操作,便会自动提交。所以我们需要在保存订单中自己控制数据库事务的执行流程。

Django中事务的使用

1. Django中可以通过django.db.transaction模块提供的atomic来定义一个事务。
2. django与MySQL中事务的比较
django中事务的使用原理与MySQL中完全一致,且标记语言也很相似。

MySQL:
start:事务开始标记
commit:提交事务
roolback:回滚事务

Django:先导入django.db.transaction模块
transaction.savepoint():设置事务保存点
transaction.savepoint_commit():提交事务
transaction.save_rollback():回滚事务至保存点

3. Django中提供两种方法实现事务

3.1 装饰器方法

from django.db import transaction

@transaction.atomic
def viewfunc(request):
  # 这些代码会在一个事务中执行
  ......

装饰器方法自动将一个视图函数整体划归为一个事务,优点是使用简单,缺点是范围太大不够灵活,也无法作用于类视图。

3.2 with语法

# 执行事务的代码块放在with下,禁止自动提交事务
with transaction.atomic():
    # 开启事务点
    sid = transaction.savepoint()
    # 回滚事务
    if...:
        transaction.save_rollback(sid)
    # 提交事务
    transaction.savepoint_commit(sid)
    
"""
订单提交逻辑示例:
开启事务点
创建订单对象
查询商品
判断商品库存是否充足
if 不充足:回滚
无问题再整体提交事务
"""

with语句可以灵活的有选择性的把某些MySQL数据库的操作看做一个事务。而且不用关心视图的类型。

因此,大多数情况下优先选用的是with语句实现事务。

相关文章

  • Django-使用事务处理多表联动数据

    Django事务介绍 以在Django中实现保存订单数据为例,涉及多张数据表的修改:增加订单数据及订单中包含的商品...

  • 【实用】11个逆天技巧,看完变数据管理绝顶高手!

    导入Excel 对外公开查询 报表对外分享 多表联动 关联其他表单数据 数据关联 数据联动 添加计算公式 拓展外链...

  • 关于 tp5 事务操作总结

    前提: 使用事务处理的话,需要数据库引擎支持事务处理。比如 MySQL 的 MyISAM 不支持事务处理,需要使用...

  • tp6进行事务操作

    使用事务处理的话,需要数据库引擎支持事务处理。比如 MySQL 的 MyISAM 不支持事务处理,需要使用 Inn...

  • sql自学笔记(七)

    连接 MySQL在SELECT语句、多表更新、多表删除语句中支持JOIN操作 语法结构 数据表参照 数据表可以使用...

  • 2018-09-10复习

    一的关系,association嵌套结果,使用多表查询语句。resultMap,绑定数据,多表查询就ok多的关系,...

  • fsLayui联动表格使用(一)

    简单联动表格使用 点击主表格,加载副表格数据,演示地址:http://fslayui.itcto.cn 联动表格配...

  • 测试高薪必备:3步教测试人员破解子查询

    测试人员由于工作原因要经常检查数据库的数据是否正确,这个时候就需要频繁使用多表查询。 ​ 在多表查询中,应用最多的...

  • 2018-08-16

    1,多表查询的思路 /*多表查询思路 1,分析题目涉及那些表; 2,如果数据来自多张表,就要使用多表查询 找到两个...

  • 软件测试高薪必备:3步教测试人员破解子查询

    测试人员由于工作原因要经常检查数据库的数据是否正确,这个时候就需要频繁使用多表查询。 在多表查询中,应用最多的就是...

网友评论

      本文标题:Django-使用事务处理多表联动数据

      本文链接:https://www.haomeiwen.com/subject/wkdhfctx.html