<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Python實現一個簡單的銀行轉賬操作方法

        來源:懂視網 責編:小采 時間:2020-11-27 14:16:26
        文檔

        Python實現一個簡單的銀行轉賬操作方法

        Python實現一個簡單的銀行轉賬操作方法:前言在進行一個應用系統的開發過程中,從上到下一般需要四個構件:客戶端-業務邏輯層-數據訪問層-數據庫,其中數據訪問層是一個底層、核心的技術。而且在實際開發中,數據庫的操作也就是說數據訪問層都是嵌套在其他語言中的,其是編程的核心。本文面向的是p
        推薦度:
        導讀Python實現一個簡單的銀行轉賬操作方法:前言在進行一個應用系統的開發過程中,從上到下一般需要四個構件:客戶端-業務邏輯層-數據訪問層-數據庫,其中數據訪問層是一個底層、核心的技術。而且在實際開發中,數據庫的操作也就是說數據訪問層都是嵌套在其他語言中的,其是編程的核心。本文面向的是p
        前言

        在進行一個應用系統的開發過程中,從上到下一般需要四個構件:客戶端-業務邏輯層-數據訪問層-數據庫,其中數據訪問層是一個底層、核心的技術。而且在實際開發中,數據庫的操作也就是說數據訪問層都是嵌套在其他語言中的,其是編程的核心。本文面向的是python語言,即通過python操作數據庫來實現簡單的銀行轉賬操作。

        工具

        python提供了python DB API用來統一操作數據庫,使訪問數據庫的接口規范化,在沒有python DB API之前,接口程序十分混亂,不同的數據庫需要不同的操作接口,所以這個接口提供了極大的方便。在具體操作的時候,我們需要操作數據庫以及其他邏輯的python代碼,數據庫連接對象connection來建立連接,數據庫交互對象cursor來“運送”數據,一個健壯的系統必不可少的便是數據庫異常類Exceptions。整個訪問數據庫流程如下圖:

        Python實現一個簡單的銀行轉賬操作方法

        接下來分別介紹下兩個主要對象:

        connection:數據庫連接對象,建立python客戶端與數據庫的網絡連接。
        創建方法:MySQLdb.connect(),包括的主要成員方法:
        cursor():使用該連接創建并返回游標
        commit():提交當前事務
        rollback():回滾當前事務
        close()關閉連接
        cursor:游標對象,用于執行查詢與獲取結果,cursor對象支持的主要方法如下:
        execute():執行SQL語句,將結果從數據庫獲取到客戶端
        fetchone():取得結果集的下一行
        fetchmany(size):獲取結果集的下size行
        fetchall():獲取結果集中剩下的所有行
        rowcount:最近一次execute返回數據的行數
        close():關閉游標對象
        在上面的方法中提到了一個關鍵名詞:事務,什么是事務呢?他是訪問和更新數據的一個程序執行單元,很多操作的一個集合,有四個特點:

        原子性:事物中包括的諸操作要么都做,要么都不做
        一致性:事務必須使數據庫從一致性狀態變到另一個一致性狀態
        隔離型:一個事務的執行不被其他事務干擾
        持久性:事務一旦提交,它對數據庫的改變就是持久性的
        事務的上述特點正是我們完成銀行轉賬操作的關鍵。

        具體實現

        在開發中我們怎么樣使用事務呢?

        關閉自動commit()
        正常結束事務:conn.commit(),
        異常結束事務:conn.rollback()
        在銀行轉賬系統中,需要考慮如下需求:比如A給B轉賬,當A賬戶上減少了M錢時,必須在B賬戶上多了M錢,不能A減了B沒加,也不能B加了A還沒有減,當然賬戶必須是有效的,M錢的金額肯定要大于A賬戶上的金額。所以在具體設計的時候,需要將A賬戶的金錢減少和B賬戶的金錢增加作為一個事務,要么同時成功,要么一起失敗。按照這個需求,書寫代碼,詳細代碼見github,代碼復制和數據庫如下,有兩個賬戶,分別擁有金錢110和10,在運行代碼的時候在參數欄輸入1,2,100(source_acctid, target_acctid, tranfer_money)。

        Python實現一個簡單的銀行轉賬操作方法

        整個代碼的邏輯如下:首先連接數據庫,之后執行邏輯,然后斷開數據庫連接,執行的邏輯包括檢查轉賬雙方的賬戶是否有效,轉賬金額是否多于轉賬人的賬戶余額,分別給轉賬雙方的帳號金額發生變化。如果正常結束事務,提交修改數據庫,否則回滾。

        #coding:utf-8
        import sys
        import MySQLdb
        class TransferMoney():
        def __init__(self, conn):
        self.conn = conn
        def transfer(self, src, target, money):
        try:
        self.check_acct_available(src)
        self.check_acct_available(target)
        self.has_enough_money(src, money)
        self.reduce_money(src, money)
        self.add_money(target, money)
        self.conn.commit()
        except Exception as e:
        print e
        self.conn.rollback()
        def reduce_money(self, src, money):
        cursor = self.conn.cursor()
        try:
        sql = "update account set money = money - %s where acctid = %s" %(money, src)
        cursor.execute(sql)
        print "reduce_money: " + sql
        #rs = cursor.fetchall()
        if cursor.rowcount != 1:
        raise Exception("the account reduce money fail")
        finally:
        cursor.close()
        def add_money(self, target, money):
        cursor = self.conn.cursor()
        try:
        sql = "update account set money = money + %s where acctid = %s" %(money, target)
        cursor.execute(sql)
        print "add_money: " + sql
        #rs = cursor.fetchall()
        if cursor.rowcount != 1:
        raise Exception("the account add money fail")
        finally:
        cursor.close()
        def check_acct_available(self, accit):
        cursor = self.conn.cursor()
        try:
        sql = "select * from account where acctid = %s" %accit
        cursor.execute(sql)
        print "check_acct_available: " + sql
        rs = cursor.fetchall()
        if len(rs) != 1:
        raise Exception("the account %s is not exist" %accit)
        finally:
        cursor.close()
        def has_enough_money(self, src, money):
        cursor = self.conn.cursor()
        try:
        sql = "select * from account where acctid = %s and money >= %s " %(src, money)
        cursor.execute(sql)
        print "has_enough_money: " + sql
        rs = cursor.fetchall()
        if len(rs) != 1:
        raise Exception("the account does not have enough money")
        finally:
        cursor.close()
        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", user = '******', passwd = '******', port = 3306, db = '******'
        )
        tr_money = TransferMoney(conn)
        try:
        tr_money.transfer(source_acctid, target_acctid, money)
        except Exception as e:
        print e
        finally:
        conn.close()

        總結

        通過對數據庫的操作就可以實現一個簡單的銀行轉賬系統,所以在系統開發的時候,我們應該盡最大的可能,讓整個系統不只是多個組件的拼接,應該實現1+1>2。

        更多Python實現一個簡單的銀行轉賬操作方法相關文章請關注PHP中文網!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Python實現一個簡單的銀行轉賬操作方法

        Python實現一個簡單的銀行轉賬操作方法:前言在進行一個應用系統的開發過程中,從上到下一般需要四個構件:客戶端-業務邏輯層-數據訪問層-數據庫,其中數據訪問層是一個底層、核心的技術。而且在實際開發中,數據庫的操作也就是說數據訪問層都是嵌套在其他語言中的,其是編程的核心。本文面向的是p
        推薦度:
        標簽: 操作 簡單 實現
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 67pao强力打造67194在线午夜亚洲 | 四色在线精品免费观看| 亚洲情a成黄在线观看动漫尤物| 亚洲人成人77777在线播放| 久久福利青草精品资源站免费| 久久久高清免费视频| 久久99亚洲综合精品首页| 国产无遮挡色视频免费观看性色| 久久久久亚洲AV成人网| 一级人做人a爰免费视频| 国产精品亚洲w码日韩中文| 亚洲一区二区三区免费视频| 91情国产l精品国产亚洲区| 久久青青草原国产精品免费| 久久亚洲精品成人av无码网站| 久久亚洲精品无码av| jjzz亚洲亚洲女人| 亚洲另类无码专区丝袜| 国产大片线上免费看| 91av免费在线视频| 亚洲av日韩av天堂影片精品| 成人免费黄色网址| 亚洲AV无码片一区二区三区| 999久久久免费精品国产| 亚洲AV中文无码乱人伦下载 | 亚洲国产精品久久久久秋霞小 | 在线观看亚洲AV每日更新无码| 久草免费手机视频| 亚洲人成77777在线观看网| 色www永久免费网站| 亚洲人成网站影音先锋播放| 成年私人影院免费视频网站| 老汉色老汉首页a亚洲| 青柠影视在线观看免费高清| 亚洲成a人片毛片在线| 国产伦精品一区二区三区免费下载| 亚洲性无码av在线| 四虎影视永久免费观看地址| 免费国产午夜高清在线视频| 精品国产日韩久久亚洲| 亚洲一区二区三区国产精品|