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中使用logging模块打印log日志详解
Apr 05 Python
在Django的视图中使用form对象的方法
Jul 18 Python
在django中使用自定义标签实现分页功能
Jul 04 Python
Python原始字符串与Unicode字符串操作符用法实例分析
Jul 22 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
Nov 01 Python
python 简单备份文件脚本v1.0的实例
Nov 06 Python
Python使用遗传算法解决最大流问题
Jan 29 Python
Python实现的用户登录系统功能示例
Feb 05 Python
Python continue继续循环用法总结
Jun 10 Python
python生成九宫格图片
Nov 19 Python
python 模块导入问题汇总
Feb 01 Python
pandas统计重复值次数的方法实现
Feb 20 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和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
利用jquery实现实时更新歌词的方法
2017/01/06 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
理解Python中的With语句
2015/02/02 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
Python实现多属性排序的方法
2018/12/05 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
python解包概念及实例
2021/02/17 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
html5录音功能实战示例
2019/03/25 HTML / CSS
旧时光糖果:Old Time Candy
2018/02/05 全球购物
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
教师校本培训方案
2014/02/26 职场文书
大学英语演讲稿范文
2014/04/24 职场文书
干部鉴定材料
2014/05/18 职场文书
应届大专生求职信
2014/06/26 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
七年级数学教学反思
2016/02/17 职场文书