python

超轻量级php框架startmvc

Python实现完整的事务操作示例

更新时间:2020-05-03 00:30:01 作者:startmvc
本文实例讲述了Python事务操作实现方法。分享给大家供大家参考,具体如下:#coding=utf-8impor

本文实例讲述了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 事务操作