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 28 Python
Python 基于Twisted框架的文件夹网络传输源码
Aug 28 Python
Python进阶篇之字典操作总结
Nov 16 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 Python
python 获取一个值在某个区间的指定倍数的值方法
Nov 12 Python
python实现诗歌游戏(类继承)
Feb 26 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
Django xadmin开启搜索功能的实现
Nov 15 Python
Python统计学一数据的概括性度量详解
Mar 03 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 Python
python脚本框架webpy模板控制结构
Nov 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合并数组+与array_merge的区别分析
2010/08/01 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
jquery foreach使用示例
2013/09/12 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
Python使用matplotlib实现在坐标系中画一个矩形的方法
2015/05/20 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
python实现扫雷游戏的示例
2020/10/20 Python
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
幼儿园教研活动总结
2014/04/30 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
人代会简报
2015/07/21 职场文书
初二物理教学反思
2016/02/19 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS
SQL优化老出错,那是你没弄明白MySQL解释计划用法
2021/11/27 MySQL
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android