python 多部操作 事务

https://www.cnblogs.com/gide/p/4771790.html

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 多部操作 事务)