Python实现完整的事务操作示例


Posted in Python onJune 20, 2017

本文实例讲述了Python事务操作实现方法。分享给大家供大家参考,具体如下:

#coding=utf-8
import sys
import MySQLdb
class TransferMoney(object):
  def __init__(self,conn):
    self.conn = conn
  #检查账户是否合法
  def check_acct_avaiable(self,acctid):
    cursor = self.conn.cursor()
    try:
      sql = "select * from account where acctid=%s" % acctid
      cursor.execute(sql)
      print "check account:" + sql
      rs = cursor.fetchall()
      if len(rs) != 1:
        raise Exception("account %s illega" % acctid)
    finally:
      cursor.close()
  #检查是否有足够的钱
  def has_enough_money(self,acctid,money):
    cursor = self.conn.cursor()
    try:
      sql = "select * from account where acctid=%s and money > %s" % (acctid,money)
      cursor.execute(sql)
      print "has enough money:" + sql
      rs = cursor.fetchall()
      if len(rs) != 1:
        raise Exception("account %s not enough money" % acctid)
    finally:
      cursor.close()
  #账户减钱
  def reduce_money(self,acctid,money):
    cursor = self.conn.cursor()
    try:
      sql = "update account set money = money-%s where acctid = %s" % (money,acctid)
      cursor.execute(sql)
      print "reduce_money:" + sql
      if cursor.rowcount != 1:
        raise Exception("reduce money fail %s" % acctid)
    finally:
      cursor.close()
  #账户加钱
  def add_money(self,acctid,money):
    cursor = self.conn.cursor()
    try:
      sql = "update account set money = money+%s where acctid = %s" % (money,acctid)
      cursor.execute(sql)
      print "add_money:" + sql
      if cursor.rowcount != 1:
        raise Exception("add money fail %s" % acctid)
    finally:
      cursor.close()
  #主执行语句
  def transfer(self,source_acctid,target_acctid,money):
    try:
      self.check_acct_avaiable(source_acctid)
      self.check_acct_avaiable(target_acctid)
      self.has_enough_money(source_acctid,money)
      self.reduce_money(source_acctid,money)
      self.add_money(target_acctid,money)
      self.conn.commit()
    except Exception as e:
      self.conn.rollback()
      raise e
if __name__ == "__main__":
  source_acctid = sys.argv[1]
  target_acctid = sys.argv[2]
  money = sys.argv[3]
  conn = MySQLdb.Connect(host = '127.0.0.1',port=3306,user='root',passwd='',db='test',charset='utf8')
  tr_money = TransferMoney(conn)
  try:
    tr_money.transfer(source_acctid,target_acctid,money)
  except Exception as e:
    print "Happen:" + str(e)
  finally:
    conn.close()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python实现在每个独立进程中运行一个函数的方法
Apr 23 Python
Python常用算法学习基础教程
Apr 13 Python
django rest framework之请求与响应(详解)
Nov 06 Python
python单线程文件传输的实例(C/S)
Feb 13 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
python给图像加上mask,并提取mask区域实例
Jan 19 Python
Python3的socket使用方法详解
Feb 18 Python
python selenium操作cookie的实现
Mar 18 Python
Python如何对XML 解析
Jun 28 Python
pytorch 多分类问题,计算百分比操作
Jul 09 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
matplotlib教程——强大的python作图工具库
Oct 15 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
Jun 20 #Python
Python实现多并发访问网站功能示例
Jun 19 #Python
Python sqlite3事务处理方法实例分析
Jun 19 #Python
Python之str操作方法(详解)
Jun 19 #Python
python urllib爬取百度云连接的实例代码
Jun 19 #Python
Python的IDEL增加清屏功能实例
Jun 19 #Python
利用python爬取散文网的文章实例教程
Jun 18 #Python
You might like
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
2011/10/31 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
php版淘宝网查询商品接口代码示例
2014/06/17 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
JavaScript中的Window窗口对象
2008/01/16 Javascript
DWR Ext 加载数据
2009/03/22 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
Python3实现转换Image图片格式
2018/06/21 Python
浅析Python四种数据类型
2018/09/26 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
python 实现的车牌识别项目
2021/01/25 Python
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
彩色的非洲教学反思
2014/02/18 职场文书
倡议书格式范文
2014/04/14 职场文书
高中班主任评语大全
2014/04/25 职场文书
住宅使用说明书
2014/05/09 职场文书
2014年度考核工作总结
2014/12/24 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
swagger如何返回map字段注释
2021/07/03 Java/Android
python turtle绘制多边形和跳跃和改变速度特效
2022/03/16 Python
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python