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使用代理抓取网站图片(多线程)
Mar 14 Python
Python3.2中的字符串函数学习总结
Apr 23 Python
Python实现的飞速中文网小说下载脚本
Apr 23 Python
python实现一次创建多级目录的方法
May 15 Python
Python中操作符重载用法分析
Apr 29 Python
Python 列表(List) 的三种遍历方法实例 详解
Apr 15 Python
python爬虫获取京东手机图片的图文教程
Dec 29 Python
Django如何将URL映射到视图
Jul 29 Python
python plt可视化——打印特殊符号和制作图例代码
Apr 17 Python
Pandas实现一列数据分隔为两列
May 18 Python
python如何保存文本文件
Jun 07 Python
keras导入weights方式
Jun 12 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
Protoss魔法科技
2020/03/14 星际争霸
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
用PHP生成excel文件到指定目录
2015/06/22 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
在Python中使用next()方法操作文件的教程
2015/05/24 Python
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
Python正则表达式和元字符详解
2018/11/29 Python
酒店人事专员岗位职责
2013/12/19 职场文书
人事档案接收函
2014/01/12 职场文书
2014和解协议书范文
2014/09/15 职场文书
交通事故被告代理词
2015/05/23 职场文书
高中家长意见怎么写
2015/06/03 职场文书
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android
尝试使用Python爬取城市租房信息
2022/04/12 Python
python​格式化字符串
2022/04/20 Python