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多线程ctrl+c退出问题解决方案
Oct 23 Python
Python序列化基础知识(json/pickle)
Oct 19 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
Jun 04 Python
使用Python机器学习降低静态日志噪声
Sep 29 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
python搜索包的路径的实现方法
Jul 19 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 Python
django 连接数据库 sqlite的例子
Aug 14 Python
画pytorch模型图,以及参数计算的方法
Aug 17 Python
python 实现图像快速替换某种颜色
Jun 04 Python
使用pytorch 筛选出一定范围的值
Jun 28 Python
如何通过安装HomeBrew来安装Python3
Dec 23 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错误、异常处理机制(补充)
2012/05/07 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
jQuery EasyUI常用数据验证汇总
2016/09/18 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
原生JS实现相邻月份日历
2020/10/13 Javascript
python利用拉链法实现字典方法示例
2017/03/25 Python
Python编写Windows Service服务程序
2018/01/04 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
python的sys.path模块路径添加方式
2020/03/09 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
python调用win32接口进行截图的示例
2020/11/11 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
倩碧英国官网:Clinique英国
2018/08/10 全球购物
.NET程序员的几道面试题
2012/06/01 面试题
在C#中如何实现多态
2014/07/02 面试题
质量工程师岗位职责
2013/11/16 职场文书
石油大学毕业生自荐信
2014/01/28 职场文书
欢度春节标语
2014/07/01 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
企业培训简报范文
2015/07/20 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL