pymysql寫簡易的銀行轉賬系統
阿新 • • 發佈:2018-12-26
import sys import pymysql class TransferMoney(object): def __init__(self,conn): self.conn=conn def check_acct_available(self,acctid): cursor = self.conn.cursor() try: sql = "select * from account where accid = '%s' " %acctid cursor.execute(sql) rs = cursor.fetchall() if len(rs) != 1: raise Exception("賬號'%s'不存在" % acctid) finally: cursor.close() def has_enough_money(self,acctid,money): cursor = self.conn.cursor() try: sql = "select * from account where accid = '%s' and money > '%d'" % (acctid,money) cursor.execute(sql) rs = cursor.fetchall() if len(rs) != 1: raise Exception("賬號'%s'沒有足夠的錢" % acctid) finally: cursor.close() def reduce_money(self,acctid, money): cursor = self.conn.cursor() try: sql = "update account set money = money -'%d' WHERE accid='%s'" % (money,acctid) cursor.execute(sql) print ("reduce_money:" + sql) if cursor.rowcount != 1: raise Exception("賬號'%s'減款異常" % acctid) finally: cursor.close() def add_money(self, acctid, money): cursor = self.conn.cursor() try: sql = "update account set money = money +'%s' WHERE accid='%s'" % (money, acctid) cursor.execute(sql) print("reduce_money:" + sql) if cursor.rowcount != 1: raise Exception("賬號'%s'加款異常" % acctid) finally: cursor.close() def transfer(self,source_acctid, target_acctid, money): try: self.check_acct_available(source_acctid) self.check_acct_available(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] # 使用 cursor() 方法建立一個遊標物件 source_acctid = input("請輸入減款人:") target_acctid = input("請輸入收款人:") money = int(input("請輸入轉款數:")) conn = pymysql.connect(host='localhost', user='root', password='', database='test', port=3306, charset='utf8') cursor = conn.cursor() tr_money = TransferMoney(conn) '''print(source_acctid) print(target_acctid) print(money)''' try: tr_money.transfer(source_acctid,target_acctid,money) except Exception as e: print("出棧問題"+str(e)) finally: conn.close()
在編寫的過程中出現pymysql.err.InternalError: (1054, "Unknown column~~~)
原因是SQL語句那裡%s沒有加引號。