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 相关文章推荐
把MySQL表结构映射为Python中的对象的教程
Apr 07 Python
Python如何判断数独是否合法
Sep 08 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
django自带的server 让外网主机访问方法
May 14 Python
pandas.loc 选取指定列进行操作的实例
May 18 Python
python生成九宫格图片
Nov 19 Python
python pygame模块编写飞机大战
Nov 20 Python
Python性能测试工具Locust安装及使用
Dec 01 Python
scrapy-splash简单使用详解
Feb 21 Python
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
Apr 25 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 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学习之PHP变量
2006/10/09 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
2011/06/16 PHP
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
php的socket编程详解
2016/11/20 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
学习ExtJS border布局
2009/10/08 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
Python切片用法实例教程
2014/09/08 Python
Python实现遍历数据库并获取key的值
2015/05/17 Python
Apache部署Django项目图文详解
2019/07/30 Python
python匿名函数用法实例分析
2019/08/03 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
纯CSS3+DIV实现小三角形边框效果的示例代码
2020/08/03 HTML / CSS
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
求职推荐信范文
2013/12/01 职场文书
预备党员党课思想汇报
2014/01/13 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
写给老师的保证书
2015/05/09 职场文书