python项目_mysql开启事务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python项目_mysql开启事务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2568字,纯文字阅读大概需要4分钟。
内容图文
![python项目_mysql开启事务](/upload/InfoBanner/zyjiaocheng/525/24f18fc59164495298ca9cf8c4a4de35.jpg)
2.设置回滚点
with transaction.atomic(): save_id = transaction.savepoint() # 设置回滚点 try: order = Order.objects.create( order_title=order_title, total_price=total_price, real_price=real_price, order_number=order_number, order_status = 0, pay_type=pay_type, credit=credit, coupon=coupon, user_id=user_id ) # 记录当前订单定义的课程信息到订单详情 redis_conn = get_redis_connection("cart") cart_hash = redis_conn.hgetall("cart_%s" % user_id) selected_set = redis_conn.smembers("selected_%s" % user_id) # 开启redis事务 pipe = redis_conn.pipeline() pipe.multi() # 计算取当前课程的总价格价格 total_price = 0 coupon_price = 0 for course_id_bytes in selected_set: course_id = course_id_bytes.decode() expire_time = int( cart_hash.get(course_id_bytes).decode() ) # 根据当前课程ID来获取课程信息 course = Course.objects.get(pk=course_id) # 把课程信息添加到订单详情里面 order_detail = OrderDetail.objects.create( order=order, course=course, expire=expire_time, price=course.real_price(expire_time), real_price=course.real_price(expire_time), # todo 将来完成优惠券或者积分的时候计算真实的价格 discount_name="原价购买", # todo 将来完成了优惠以后,这里进行调整 ) # 从购物车中删除对应的商品课程 pipe.hdel("cart_%s" % user_id, course_id) pipe.srem("selected_%s" % user_id, course_id) total_price += float(order_detail.price) # 计算订单的总价格 # 判断是否使用了积分,,如果使用了积分,则积分抵扣的金额 if credit > 0: # 判断是否使用了优惠券,如果使用了优惠券,则计算优惠券的抵扣金额 credit_price = credit / constants.CREDIT_MONEY if coupon > 0: user = self.context["request"].user coupon = validated_data.get("coupon") now_time = datetime.now() try: result = UserCoupon.objects.get(pk=coupon, is_show=True, is_deleted=False, user_id=user.id, start_time__lt=now_time, end_time__gt=now_time) except UserCoupon.DoesNotExist: raise serializers.ValidationError("对不起,当前优惠券不存在或者已经过期不可用!") sale = result.coupon.sale if result.coupon.coupon_type == 0: # 折扣优惠 coupon_price = total_price * (1-float(sale[1:])) else: # 减免优惠 coupon_price = float(sale[1:] ) # 提交redis事务操作 pipe.execute() #保存总价格和实付价格到订单里面 order.total_price = total_price order.real_price = total_price - credit/constants.CREDIT_MONEY - coupon_price order.save() except: transaction.savepoint_rollback(save_id) return serializers.ValidationError("订单生成失败!")
python项目_mysql开启事务
标签:poi nbsp mem validate lse imp col 开启 div
本文系统来源:https://www.cnblogs.com/jalen-123/p/13192078.html
内容总结
以上是互联网集市为您收集整理的python项目_mysql开启事务全部内容,希望文章能够帮你解决python项目_mysql开启事务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。