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字典多条件排序方法实例
Jun 30 Python
Python下的twisted框架入门指引
Apr 15 Python
python使用PyGame模块播放声音的方法
May 20 Python
Python中使用ElementTree解析XML示例
Jun 02 Python
python中WSGI是什么,Python应用WSGI详解
Nov 24 Python
Python实现计算圆周率π的值到任意位的方法示例
May 08 Python
Python实现的文本对比报告生成工具示例
May 22 Python
修复 Django migration 时遇到的问题解决
Jun 14 Python
django 实现电子支付功能的示例代码
Jul 25 Python
浅谈python之高阶函数和匿名函数
Mar 21 Python
决策树剪枝算法的python实现方法详解
Sep 18 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 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
PHP新手上路(七)
2006/10/09 PHP
PHP编程中字符串处理的5个技巧小结
2007/11/13 PHP
php smarty模版引擎中的缓存应用
2009/12/02 PHP
php 高性能书写
2010/12/11 PHP
php提交post数组参数实例分析
2015/12/17 PHP
PHP之header函数详解
2021/03/02 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
javascript 运算数的求值顺序
2011/08/23 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
2016/12/27 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
python每隔N秒运行指定函数的方法
2015/03/16 Python
python threading模块操作多线程介绍
2015/04/08 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
Python request post上传文件常见要点
2020/11/20 Python
Python爬虫开发与项目实战
2020/12/16 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
秘书英文求职信
2014/04/16 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
党性修养心得体会2016
2016/01/21 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
自荐信大全
2019/03/21 职场文书