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执行外部程序的常用方法小结
Mar 21 Python
Python创建对称矩阵的方法示例【基于numpy模块】
Oct 12 Python
Python面向对象程序设计多继承和多态用法示例
Apr 08 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
Python动态语言与鸭子类型详解
Jul 01 Python
python实现beta分布概率密度函数的方法
Jul 08 Python
Django如何使用第三方服务发送电子邮件
Aug 14 Python
python循环嵌套的多种使用方法解析
Nov 29 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
Jan 08 Python
Python如何实现爬取B站视频
May 20 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
python中判断数字是否为质数的实例讲解
Dec 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 开源AJAX框架14种
2009/08/24 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
PHP获取MAC地址的函数代码
2011/09/11 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
图片自动更新(说明)
2006/10/02 Javascript
用javascript实现画板的代码
2007/09/05 Javascript
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
Ext.MessageBox工具类简介
2009/12/10 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
jquery选择checked在ie8普通模式下的问题
2014/02/12 Javascript
详解JS函数重载
2014/12/04 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
2017/02/05 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
JavaScript实现的九种排序算法
2019/03/04 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
python使用yaml 管理selenium元素的示例
2020/12/01 Python
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
初级会计求职信范文
2014/02/15 职场文书
大学生就业策划书范文
2014/04/04 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
大学生学年个人总结
2015/02/15 职场文书