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实现短网址ShortUrl的Hash运算实例讲解
Aug 10 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
python 生成器协程运算实例
Sep 04 Python
如何用Python实现简单的Markdown转换器
Jul 16 Python
Python多线程应用于自动化测试操作示例
Dec 06 Python
Python判断一个文件夹内哪些文件是图片的实例
Dec 07 Python
Django 创建/删除用户的示例代码
Jul 24 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
python 实现多维数组转向量
Nov 30 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
Jan 10 Python
pytorch使用tensorboardX进行loss可视化实例
Feb 24 Python
Python collections模块的使用方法
Oct 09 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 中的批处理的实现
2007/06/14 PHP
php查看session内容的函数
2008/08/27 PHP
php 全局变量范围分析
2009/08/07 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
js实现的常用的左侧导航效果
2013/10/17 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
jQuery实现的简单在线计算器功能
2017/05/11 jQuery
详解10分钟学会vue滚动行为
2017/09/21 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
详解vue引入子组件方法
2019/02/12 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
小程序调用微信支付的方法
2019/09/26 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
python 查找字符串是否存在实例详解
2017/01/20 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
python虚拟环境迁移方法
2019/01/03 Python
python有几个版本
2020/06/17 Python
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
公司前台接待岗位职责
2013/12/03 职场文书
企事业单位求职者的自我评价
2013/12/28 职场文书
装饰资料员岗位职责
2013/12/30 职场文书
模范家庭事迹材料
2014/02/10 职场文书
社会实践活动总结范文
2014/07/03 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
合同和协议有什么区别?
2014/10/08 职场文书
联欢会开场白
2015/06/01 职场文书
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python