1. 程式人生 > >pymysql寫簡易的銀行轉賬系統

pymysql寫簡易的銀行轉賬系統

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沒有加引號。