django中数据库事物的管理

事务(Transaction)是并发控制的基本单位。所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。所以,应该把他们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

在django1.8中事务的使用  注意:只要是已报异常,程序就自动回滚了。。

from django.db import transaction
#首先要导包
@transaction.atomic
@innerdef list(request):
    post= request.POST
    address = post.get(‘email‘)
    cart_id=post.getlist(‘cart_id‘)

    # 在调用一个view里面的方法之前,django开始一个事务如果发出的响应没有问题,
    # Django就会提交这个事务。如果在view这里产生一个异常,Django就会回滚这次事务
    # 开启事物保护
    sid = transaction.savepoint()
    try:
        # 1.建立新的订单信息
        # transaction.savepoint_commit(sid)  #事物的提交
        order = OrderInfo()
        now = datetime.now()
        uid = request.session[‘user_id‘]
        order.oid=(‘%s%d‘)%(now.strftime(‘%Y%m%d%H%M%S‘), uid)  # 拼接字符代码
        order.user_id=uid
        order.udate = now
        order.oaddress = address
        print(order.oaddress,order.udate,order.user_id,order.oid,uid,now)
        order.otatal=0
        order.save()
        total=0  # 计算好的总价
        for cid in cart_id:
            cart=CartInfo.objects.get(pk=cid)
            # 2.判断库存,减少数据库库存
            if cart.goods.gkucun>=cart.count:
                cart.goods.gkucun-=cart.count
                cart.goods.save()         # 连表保存数据库的值
                # 把信息添加订单
                datail = OrderDetailInfo()
                datail.order=order        # 保存的外键对应ID
                datail.goods=cart.goods          #保存外键对应Id
                datail.price=cart.goods.gprice
                datail.count=cart.count
                # print(order,cart.goods,cart.goods.gprice)

                datail.save()
                # 计算总价
                total+=cart.goods.gprice*cart.count
                # 购车用完了删除
                cart.delete()
            else: # 购车数量比库存大
                transaction.savepoint_rollback(sid) #事务的回滚
                return redirect(‘/cart/‘)
        order.ototal = total
        print(total)
        order.save() # 计算完了 保存总价格
        transaction.savepoint_commit(sid) #提交事务的逻辑
        return redirect(‘/user/order/1‘)

    except :
        # 发生异常就回滚
        transaction.savepoint_rollback(sid)
时间: 2025-01-02 14:20:35

django中数据库事物的管理的相关文章

django中数据库事务的处理

今天在django中处理数据库数据时,用到事务,官方文档看不下去,网上查资料,那叫一个大海捞针啊,还找不到自己想要的效果. django中的事务, 依据Django1.6的文档,“Django提供了一种简单的API去控制数据库的事务交易...原子操作用来定义数据库事务的属性. 原子操作允许我们在数据库保证的前提下,创建一堆代码.如果这些代码被成功的执行,所对应的改变也会提交到数据库中.如果有异常发生,那么操作就会回滚.”可以采用装饰器用法或代码块用法,强力推荐代码块,如下. from djang

django中数据库的相关操作

一.使用环境 python2.7,django>1.7 二.数据库进行配置 在setting文件中进行修改 1.找到DATABASES DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'studentInfo', # Or path to database file if usi

Django 学习笔记之五 Django中数据库中ManyToManyField及ForeignKey

1.model里面的代码: from __future__ import unicode_literalsimport django.utils.timezone as timezonefrom django.db import models # Create your models here.class Publisher(models.Model): name = models.CharField(max_length=30) address = models.CharField(max_l

Spring中的事物管理,用 @Transactional 注解声明式地管理事务

事物: 事务管理是企业级应用程序开发中必不可少的技术,  用来确保数据的 完整性和 一致性. 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 事务的四个关键属性: 原子性:事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用. 一致性:一旦所有事务动作完成, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中. 隔离性:可能有许多事务会同时处理相同的数据, 因此每个事物都应该与其他事务隔离开来,

数据库中的事物

概念:在数据中事务是工作的逻辑单元,一个事务是有一个获多个完成一组的相关行为的Sql语句组成.通过事务机制确保这一组sql语句所作的操作要么完全执行成功,要么一点也不执行. 主要特征:确保数据库的完整性 事务的ACID特性: A是事务的原子性:事务中包含的所有操作要么全做,要么全不做,也就是说所有的活动在数据中要么全反映要不全都不反映. C是事务的一致性:数据库在事务操作前和事务处理后,其中数据必须满足业务的规则约束. I是事务的隔离性:数据库允许多个并发的事物同时对其中的数据进行读写或修改的能

[Django]中建立数据库视图

Django中建立数据库视图 Django中没有建立视图的接口,如果要建立一个视图需要一些手动的改变. 这里使用的Django 版本>1.5, 使用的数据库为mysql 第一步 建立视图,例如视图的名称叫做 user_info 第二步 model中这么写: class MyModel(models.Model): ... class Meta: managed = False db_table = "user_info" 这样就可以把视图经过orm变成对象了. REF: crea

关于Django中的数据库操作API之distinct去重的一个误传

关于Django中的数据库操作API之distinct去重的一个误传 最近在做一个Server的项目,后台框架是Apache mod_wsgi + django.django是一个基于Python的Web开发框架,功能十分强大,至于有多强大,还是读者们自己去体验吧.我在这里要说的一个问题是关于Python的ORM功能的.问题就在django提供的数据库操作API中的distinct()函数,了解SQL语句的读者都应该知道,DISTINCT关键字可以在select操作时去重.django里的这个d

Django中的数据库查询

web应用需要经常向数据库查询相关的数据,Django语言也不例外.了解Django中的数据查询操作,对于优化应用的性能,有着重要的意义. 基础信息 Django中,model通过Manager获取QuerySet,每个model至少有objects这个 Manager . QuerySet 可以有一个或多个 filter , filter 根据传入的参数返回 QuerySet 结果. 用SQL来对比, QuerySet 相当于 SELECT , filter 相当于 WHERE 或者是 LIM

Spring中的事物管理----HelloWorld

在学习Spring的事物管理之前明白先明白几个概念1什么是事物:事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 例子说明:例如银行转账,A账户转账(转200)到B账户,涉及的动作就是A账户余额减少200,B账户余额增加200,把这两个动作当成一个工作单元,要么两个动作一起完成,要么两个动作都不起用 2事物作用是什么:有四大特性,分别是:原子性(就是多个动作组成一个原子操作,要么一起完成,要么一起不起作用)        一致性(就是事物完成后,数