django中数据库事物的管理
Posted python小菜鸡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
以上是关于django中数据库事物的管理的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django Summernote 中显示编程片段的代码块?
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段