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程序语言快速上手教程
Jul 18 Python
利用Python实现图书超期提醒
Aug 02 Python
python通过伪装头部数据抵抗反爬虫的实例
May 07 Python
python3.6利用pyinstall打包py为exe的操作实例
Oct 31 Python
python安装pywin32clipboard的操作方法
Jan 24 Python
python-Web-flask-视图内容和模板知识点西宁街
Aug 23 Python
python 图像处理画一个正弦函数代码实例
Sep 10 Python
python如何获取apk的packagename和activity
Jan 10 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 Python
python字典key不能是可以是啥类型
Aug 04 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 Python
python中subplot大小的设置步骤
Jun 28 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 获取当前访问的url文件名的方法小结
2010/02/08 PHP
PHP print类函数使用总结
2010/06/25 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
学习PHP的数组总结【经验】
2016/05/05 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
Laravel数据库读写分离配置的方法
2019/10/13 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
mpvue小程序循环动画开启暂停的实现方法
2019/05/15 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
Python中条件判断语句的简单使用方法
2015/08/21 Python
python僵尸进程产生的原因
2017/07/21 Python
Python之web模板应用
2017/12/26 Python
python中abs&map&reduce简介
2018/02/20 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
django迁移数据库错误问题解决
2019/07/29 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
python批量修改xml属性的实现方式
2020/03/05 Python
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
材料加工硕士生求职信
2013/10/10 职场文书
办公室助理岗位职责
2013/12/25 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
2014年组织部工作总结
2014/11/14 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
2016年党建工作简报
2015/11/26 职场文书