• python一套完整的事务操作


     1 #coding=utf-8
     2 import sys
     3 import MySQLdb
     4 
     5 class TransferMoney(object):
     6     def __init__(self,conn):
     7         self.conn = conn
     8 
     9     #检查账户是否合法
    10     def check_acct_avaiable(self,acctid):
    11         cursor = self.conn.cursor()
    12         try:
    13             sql = "select * from account where acctid=%s" % acctid
    14             cursor.execute(sql)
    15             print "check account:" + sql
    16             rs = cursor.fetchall()
    17             if len(rs) != 1:
    18                 raise Exception("account %s illega" % acctid)
    19         finally:
    20             cursor.close()
    21 
    22     #检查是否有足够的钱
    23     def has_enough_money(self,acctid,money):
    24         cursor = self.conn.cursor()
    25         try:
    26             sql = "select * from account where acctid=%s and money > %s" % (acctid,money)
    27             cursor.execute(sql)
    28             print "has enough money:" + sql
    29             rs = cursor.fetchall()
    30             if len(rs) != 1:
    31                 raise Exception("account %s not enough money" % acctid)
    32         finally:
    33             cursor.close()
    34 
    35     #账户减钱
    36     def reduce_money(self,acctid,money):
    37         cursor = self.conn.cursor()
    38         try:
    39             sql = "update account set money = money-%s where acctid = %s" % (money,acctid)
    40             cursor.execute(sql)
    41             print "reduce_money:" + sql
    42             if cursor.rowcount != 1:
    43                 raise Exception("reduce money fail %s" % acctid)
    44         finally:
    45             cursor.close()
    46 
    47     #账户加钱
    48     def add_money(self,acctid,money):
    49         cursor = self.conn.cursor()
    50         try:
    51             sql = "update account set money = money+%s where acctid = %s" % (money,acctid)
    52             cursor.execute(sql)
    53             print "add_money:" + sql
    54             if cursor.rowcount != 1:
    55                 raise Exception("add money fail %s" % acctid)
    56         finally:
    57             cursor.close()
    58     #主执行语句
    59     def transfer(self,source_acctid,target_acctid,money):
    60         try:
    61             self.check_acct_avaiable(source_acctid)
    62             self.check_acct_avaiable(target_acctid)
    63             self.has_enough_money(source_acctid,money)
    64             self.reduce_money(source_acctid,money)
    65             self.add_money(target_acctid,money)
    66             self.conn.commit()
    67         except Exception as e:
    68             self.conn.rollback()
    69             raise e
    70 
    71 if __name__ == "__main__":
    72     source_acctid = sys.argv[1]
    73     target_acctid = sys.argv[2]
    74     money = sys.argv[3]
    75     conn = MySQLdb.Connect(host = '127.0.0.1',port=3306,user='root',passwd='',db='test',charset='utf8')
    76     tr_money = TransferMoney(conn)
    77 
    78     try:
    79         tr_money.transfer(source_acctid,target_acctid,money)
    80     except Exception as e:
    81         print "Happen:" + str(e)
    82     finally:
    83         conn.close()
  • 相关阅读:
    前端开发笔记(2)css基础(上)
    前端开发笔记(1)html基础
    <Android 基础(三 十)> Fragment (3) ~ PreferenceFragment
    MyEclipse中搭建Struts2开发环境
    Android 投射工具和录屏工具
    似是而非的k=sqrt(n)
    算法:求比指定数大且最小的“不重复数”问题的高效实现
    巧用“异或”
    12个滑稽的C语言面试问答——《12个有趣的C语言问答》评析(5)
    12个滑稽的C语言面试问答——《12个有趣的C语言问答》评析(4)
  • 原文地址:https://www.cnblogs.com/gide/p/4771790.html
Copyright © 2020-2023  润新知