# -*- coding: UTF-8 -*-import mysqlfrom mysql import connectoruser = 'root'pwd = '123456'host = '127.0.0.1'port = '3306'db = 'springmvc'# 轉賬類class TransferMoney(object): # 建構函式 def __init__(self, conn): self.conn = conn # 實現轉賬邏輯 def transfer(self, source_accid, target_accid, money): try: self.check_acct_available(source_accid) self.check_acct_available(target_accid) self.has_enough_money(source_accid, money) self.reduce_money(source_accid, money) self.add_money(target_accid, money) self.conn.commit() except Exception as e: self.conn.rollback() raise e # 檢驗賬戶是否存在 def check_acct_available(self, accid): cursor = self.conn.cursor() try: sql = "SELECT * FROM bank WHERE account = %s" % accid cursor.execute(sql) rs = cursor.fetchall() if len(rs) != 1: raise Exception("帳號%s不存在" % accid) if len(rs) == 1: print("ok") finally: cursor.close() # 檢驗是否有足夠money def has_enough_money(self, accid, money): cursor = self.conn.cursor() try: sql = "SELECT * FROM bank WHERE account = %s AND money > %s" % (accid, money) cursor.execute(sql) rs = cursor.fetchall() if len(rs) != 1: raise Exception("賬戶%s餘額不足" % accid) if len(rs) == 1: print("ok") finally: cursor.close() # 開始扣錢 def reduce_money(self, accid, money): cursor = self.conn.cursor() try: sql = "UPDATE bank SET money = money - %s WHERE account = %s" % (money, accid) cursor.execute(sql) if cursor.rowcount != 1: raise Exception("賬戶%s扣款%s失敗" % (accid, money)) if cursor.rowcount == 1: print("ok") finally: cursor.close() # 開始加錢 def add_money(self, accid, money): cursor = self.conn.cursor() try: sql = "UPDATE bank SET money = money + %s WHERE account = %s" % (money, accid) cursor.execute(sql) if cursor.rowcount != 1: raise Exception("賬戶%s加錢%s失敗" % (accid, money)) if cursor.rowcount == 1: print("ok") finally: cursor.close()# main方法if __name__ == "__main__": print("輸入轉賬id:") source_accid = input() print("輸入收賬id:") target_accid = input() print("輸入收賬金額:") money = input() conn = mysql.connector.connect(user = user, password = pwd, host = host, port = port, database = db) try: tr_money = TransferMoney(conn) tr_money.transfer(source_accid, target_accid, money) except Exception as e: print(e) finally: conn.close()