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中urllib2模块的8个使用细节分享
Jan 01 Python
在Python中使用next()方法操作文件的教程
May 24 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
Sep 11 Python
用Eclipse写python程序
Feb 10 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
python交换两个变量的值方法
Jan 12 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
利用Python如何实时检测自身内存占用
May 09 Python
pytorch 查看cuda 版本方式
Jun 23 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 Python
利用Python实现模拟登录知乎
May 25 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 处理图片的类实现代码
2009/10/23 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
javascript优先加载笔记代码
2008/09/30 Javascript
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
微信小程序 rpx 尺寸单位详细介绍
2016/10/13 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
Python多线程实现同步的四种方式
2017/05/02 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
Python基于回溯法解决01背包问题实例
2017/12/06 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
Python编程中类与类的关系详解
2019/08/08 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
pandas按条件筛选数据的实现
2021/02/20 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
青年创业培训欢迎词
2014/01/08 职场文书
小学一年级学生评语
2014/04/22 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript
Android Studio 计算器开发
2022/05/20 Java/Android
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android