zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    Python基础-16生成器-迭代器
    Python基础-15模块-包-库
    Python基础-14异常处理
    Python基础-13面向对象
    Python基础-12解析式
    Python 入门日记(十)—— 文件和异常
    Python 入门日记(九)—— 类
    Python 入门日记(八)—— 函数
    Python 入门日记(七)—— 用户输入和 while 循环
    Python 入门日记(六)—— 字典
  • 原文地址:https://www.cnblogs.com/gide/p/4771790.html
Copyright © 2011-2022 走看看