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 27 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
python日志记录模块实例及改进
Feb 12 Python
python编程实现希尔排序
Apr 13 Python
python3实现UDP协议的服务器和客户端
Jun 14 Python
python 函数传参之传值还是传引用的分析
Sep 07 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
Dec 03 Python
Python格式化输出%s和%d
May 07 Python
python随机在一张图像上截取任意大小图片的方法
Jan 24 Python
python中logging模块的一些简单用法的使用
Feb 22 Python
Django REST framework内置路由用法
Jul 26 Python
Python中import导入不同目录的模块方法详解
Feb 18 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
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
javascript+css3 实现动态按钮菜单特效
2016/02/06 Javascript
JavaScript之WebSocket技术详解
2016/11/18 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
Python中的匿名函数使用简介
2015/04/27 Python
pycharm安装图文教程
2017/05/02 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
浅谈Python处理PDF的方法
2017/11/10 Python
python调用自定义函数的实例操作
2019/06/26 Python
Python实现最大子序和的方法示例
2019/07/05 Python
keras 多gpu并行运行案例
2020/06/10 Python
python和php哪个更适合写爬虫
2020/06/22 Python
Django视图、传参和forms验证操作
2020/07/15 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
大四毕业生学习总结的自我评价
2013/10/31 职场文书
老公给老婆的道歉信
2014/01/10 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
主要领导对照检查材料
2014/08/26 职场文书
2014年教务处工作总结
2014/12/03 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
Javascript 解构赋值详情
2021/11/17 Javascript