最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python操作MySQL 模擬簡(jiǎn)單銀行轉(zhuǎn)賬操作

 更新時(shí)間:2017年09月27日 11:17:53   作者:幸福清風(fēng)  
這篇文章主要介紹了python操作MySQL 模擬簡(jiǎn)單銀行轉(zhuǎn)賬操作,需要的朋友可以參考下

一、基礎(chǔ)知識(shí)

1、MySQL-python的安裝

下載,然后 pip install 安裝包

2、python編寫(xiě)通用數(shù)據(jù)庫(kù)程序的API規(guī)范

(1)、數(shù)據(jù)庫(kù)連接對(duì)象 connection,建立python客戶端與數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)連接,創(chuàng)建方法為 MySQLdb.Connect(參數(shù))

     參數(shù)有六個(gè):     host(MySQL服務(wù)器地址,一般本地為127.0.0.1)

                            port(MySQL服務(wù)器端口號(hào))
                            user(用戶名)
                            passwd(密碼)
                            db(數(shù)據(jù)庫(kù)名稱)
                            charset(連接編碼)

     connection的方法: cursor()使用該連接并返回游標(biāo)

                                      commit()提交當(dāng)前事務(wù)
                                      rollback()回滾當(dāng)前事務(wù)
                                      close()關(guān)閉連接

(2)、數(shù)據(jù)庫(kù)游標(biāo)對(duì)象cursor,用于執(zhí)行查詢和獲取結(jié)果

    方法:execute(op[,args])執(zhí)行一個(gè)數(shù)據(jù)庫(kù)查詢 和 命令

              fetchone()取得結(jié)果集的下一行
              fetchmany(size)獲取結(jié)果集的下幾行
              fetchall()獲取結(jié)果集中剩下的所有行
              rowcount 最近一次execute返回?cái)?shù)據(jù)的行數(shù)或影響行數(shù)
              close()關(guān)閉游標(biāo)對(duì)象

connection與cursor:connection相當(dāng)于python與MySQL之間的路,而cursor相當(dāng)于路上的運(yùn)輸車來(lái)傳送命令與結(jié)果。                     

3、簡(jiǎn)單命令:

select  查詢數(shù)據(jù):sql="select * from 表名 所查項(xiàng)目"
insert  插入數(shù)據(jù):sql=“insert into 表名  所插項(xiàng)目”
update 更改數(shù)據(jù): sql=“updata 表名 set  所改項(xiàng)目 ”
delete 刪除數(shù)據(jù): sql=“delete from 表名 所刪項(xiàng)目”
where也是sql命令的關(guān)鍵存在,通常是  where 表頭=列名 來(lái)定位那一列

4、事務(wù)

訪問(wèn)和更新數(shù)據(jù)庫(kù)的一個(gè)程序執(zhí)行單元,所執(zhí)行的命令,都可以稱為事務(wù)

具有原子性,一致性,隔離性,持久性

事務(wù)執(zhí)行:

     conn.commit() 正常結(jié)束事務(wù)
     conn.rollback() 異常結(jié)束事務(wù),對(duì)事務(wù)進(jìn)行回滾,若程序執(zhí)行單元中的連續(xù)的操作在進(jìn)行中出錯(cuò),之前的操作還原。

簡(jiǎn)單操作過(guò)程:    開(kāi)始 → 創(chuàng)建connection →獲取cursor → 程序執(zhí)行單元 → 關(guān)閉cursor → 關(guān)閉connection → 結(jié)束

二、模擬銀行轉(zhuǎn)賬系統(tǒng)代碼

#coding=utf-8 
import sys 
import MySQLdb 
''''' 
python操作MySQL數(shù)據(jù)庫(kù),模擬銀行轉(zhuǎn)賬 
''' 
class Trans_for_Money(object): 
 #初始化 類 
 def __init__(self,conn): 
  self.conn = conn 
 #### 1、檢查所輸入的賬號(hào)是否存在 #### 
 def check_acct_available(self,source_acctid): 
  #使用與數(shù)據(jù)庫(kù)的鏈接并返回游標(biāo) 
  cursor=self.conn.cursor() 
  try: 
   #數(shù)據(jù)庫(kù)命令 
   sql="select * from tr_money where acctid=%s" %source_acctid 
   #執(zhí)行命令 
   cursor.execute(sql) 
   #為方便觀察執(zhí)行過(guò)程 
   print "check_acct_available:" + sql 
   #講結(jié)果集放入變量result中,若result不等于1,則沒(méi)有這個(gè)賬號(hào),輸出異常 
   result=cursor.fetchall() 
   if len(result)!=1: 
    raise Exception("賬號(hào)%s不存在" %source_acctid) 
  finally: 
   #若過(guò)程出現(xiàn)問(wèn)題,仍需要關(guān)閉游標(biāo)對(duì)象 
   cursor.close() 
 #### 2、檢查減款人余額是否充足,方法與上一個(gè)函數(shù)一樣,只是多加了一個(gè)money參數(shù) ### 
 def has_enough_money(self,source_acctid,money): 
  cursor=self.conn.cursor() 
  try: 
   sql="select * from tr_money where acctid=%s and money>%s" %(source_acctid,money) 
   cursor.execute(sql) 
   print "has_enough_money:" + sql 
   result=cursor.fetchall() 
   if len(result)!=1: 
    raise Exception("賬號(hào)%s余額不足" %source_acctid) 
  finally: 
   cursor.close() 
 #### 3、減款操作 ### 
 def reduce_money(self,source_acctid,money): 
  cursor=self.conn.cursor() 
  try: 
   #數(shù)據(jù)庫(kù)命令,減去對(duì)應(yīng)減款人的金額數(shù) 
   sql="update tr_money set money=money-%s where acctid=%s" %(money,source_acctid) 
   cursor.execute(sql) 
   print "reduce_money:" + sql 
   #操作的execute()數(shù)據(jù)行數(shù)不等于1則減款失敗 
   if cursor.rowcount!=1: 
    raise Exception("賬號(hào)%s減款失敗" %source_acctid) 
  finally: 
   cursor.close() 
 #### 4、收款操作,與減款方法相同 ### 
 def add_money(self,target_acctid,money): 
  cursor=self.conn.cursor() 
  try: 
   sql="update tr_money set money=money+%s where acctid =%s" %(money,target_acctid) 
   cursor.execute(sql) 
   print "add_money:" + sql 
   if cursor.rowcount!=1: 
    raise Exception("賬號(hào)%s收款失敗" %target_acctid) 
  finally: 
   cursor.close() 
 #### 5、分別傳入?yún)?shù),代入上方函數(shù),執(zhí)行操作 ### 
 def trans_for(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) 
   #提交當(dāng)前事務(wù) 
   self.conn.commit() 
  except Exception as e: 
   #若出錯(cuò),回滾當(dāng)前事務(wù) 
   self.conn.rollback() 
   raise e 
if __name__=="__main__": 
 # source_acctid=sys.argv[1] 
 # target_acctid=sys.argv[2] 
 # money=sys.argv[3] 
 #建立與數(shù)據(jù)庫(kù)的鏈接 
 conn = MySQLdb.Connect( 
       host='127.0.0.1', 
       port=3306, 
       user='root', 
       passwd='12345678', 
       db='tt', 
       charset='utf8' 
       ) 
 #手動(dòng)輸入減款人、收款人、轉(zhuǎn)款數(shù) 
 source_acctid=raw_input("請(qǐng)輸入減款人: ") 
 target_acctid=raw_input("請(qǐng)輸入收款人: ") 
 money=raw_input("請(qǐng)輸入轉(zhuǎn)款數(shù): ") 
 #將參數(shù)傳入類中 
 tr_money=Trans_for_Money(conn) 
 try: 
  tr_money.trans_for(source_acctid,target_acctid,money) 
 except Exception as e: 
  print"出現(xiàn)問(wèn)題:"+str(e) 
 finally: 
  conn.close() 
  #關(guān)閉鏈接 

三、問(wèn)題解決

1、sys.argv[ ] 

因?yàn)榻虒W(xué)視頻中用的IDE是MyEclipse,最后用run.Configuration 輸入?yún)?shù),而我用的是pycharm,表示笨的找不到還是其實(shí)它沒(méi)有!

所以選擇用raw_input() 在執(zhí)行過(guò)程中輸入?yún)?shù)

其實(shí)有去了解sys.argv[ ],但還是懂不太清楚。

2、  mysql_exceptions.IntegrityError: (1062, "Duplicate entry '7' for key 'PRIMARY'")

這個(gè)錯(cuò)誤表示你所要插入的數(shù)據(jù)已經(jīng)存在,最好去觀察一下數(shù)據(jù)庫(kù)的數(shù)據(jù)與自己的程序操作是否有矛盾

3、MySql 建表或輸入數(shù)值時(shí)出錯(cuò):1170-BLOB/TEXT column‘name'used in key specification without a key length

錯(cuò)誤信息為BLOB或者TEXT字段使用了未指定鍵值長(zhǎng)度的鍵

解決方法:設(shè)置其他為主鍵  或   將數(shù)據(jù)形式改為varchar

具體解釋網(wǎng)址:http://myhblog1989.blog.163.com/blog/static/183225376201110875818884/

4、TypeError: 'post' is an invalid keyword argument for this function

錯(cuò)誤原因:TypeError: “post”是這個(gè)函數(shù)的無(wú)效參數(shù)

這個(gè)問(wèn)題錯(cuò)的很無(wú)語(yǔ),一時(shí)腦子進(jìn)水把 “port”=3306 寫(xiě)成了“post”=‘3306'

5、1054, "Unknown column 'acctid' in 'where clause'

錯(cuò)誤原因:在where子句中找不到“acctid”列

呵呵,上個(gè)錯(cuò)誤腦子進(jìn)的水沒(méi)排出來(lái),把表頭寫(xiě)錯(cuò)了…………

6、另外,還有一個(gè)錯(cuò)誤是手動(dòng)輸入的減款,收款人設(shè)為字母或漢字時(shí)找不到

可能是我代碼或數(shù)據(jù)庫(kù)建表時(shí)的設(shè)定問(wèn)題,表示在字符轉(zhuǎn)換和數(shù)據(jù)庫(kù)這方面還是小白一枚,繼續(xù)奮斗吧!

7、MySQL數(shù)據(jù)庫(kù)的啟動(dòng)

計(jì)算機(jī) → 右鍵 → 管理 → 服務(wù)和應(yīng)用程序 → 服務(wù) → 找到MySQL → 右鍵啟動(dòng)

四、具體執(zhí)行顯示

1、數(shù)據(jù)庫(kù) tr_money 表的初始狀態(tài)

2、代碼執(zhí)行,輸入減款人,收款人,轉(zhuǎn)款數(shù)額

3、執(zhí)行,結(jié)果出現(xiàn)代碼中特意 print 的操作進(jìn)程顯示

4、數(shù)據(jù)庫(kù) tr_money 表執(zhí)行后狀態(tài)

總結(jié)

以上所述是小編給大家介紹的python 操作mysql 模擬銀行轉(zhuǎn)賬,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Spy++的使用方法及下載教程

    Spy++的使用方法及下載教程

    這篇文章主要介紹了Spy++的使用方法及下載教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • pytorch點(diǎn)乘與叉乘示例講解

    pytorch點(diǎn)乘與叉乘示例講解

    今天小編就為大家分享一篇pytorch點(diǎn)乘與叉乘示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python學(xué)生信息管理系統(tǒng)實(shí)現(xiàn)代碼

    python學(xué)生信息管理系統(tǒng)實(shí)現(xiàn)代碼

    這篇文章主要介紹了python學(xué)生信息管理系統(tǒng)的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單,復(fù)制即可使用,需要的朋友可以參考下
    2019-12-12
  • 解決Python3中Matplotlib繪圖顯示方塊的問(wèn)題

    解決Python3中Matplotlib繪圖顯示方塊的問(wèn)題

    這篇文章主要介紹了解決Python3中Matplotlib繪圖顯示方塊的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python自動(dòng)化中三種等待時(shí)間方式

    Python自動(dòng)化中三種等待時(shí)間方式

    這篇文章主要介紹了Python自動(dòng)化中三種等待時(shí)間方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python爬蟲(chóng)請(qǐng)求頭設(shè)置代碼

    python爬蟲(chóng)請(qǐng)求頭設(shè)置代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于python爬蟲(chóng)請(qǐng)求頭如何設(shè)置內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • PyTorch策略梯度算法詳情

    PyTorch策略梯度算法詳情

    這篇文章主要介紹了PyTorch策略梯度算法詳情,文章我們主要使用策略梯度算法解決CartPole問(wèn)題,詳細(xì)的相關(guān)介紹,需要的朋友可以參考一下
    2022-07-07
  • Python氣泡提示與標(biāo)簽的實(shí)現(xiàn)

    Python氣泡提示與標(biāo)簽的實(shí)現(xiàn)

    這篇文章主要介紹了Python氣泡提示與標(biāo)簽的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • TensorFlow2.0矩陣與向量的加減乘實(shí)例

    TensorFlow2.0矩陣與向量的加減乘實(shí)例

    今天小編就為大家分享一篇TensorFlow2.0矩陣與向量的加減乘實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • python實(shí)現(xiàn)簡(jiǎn)易內(nèi)存監(jiān)控

    python實(shí)現(xiàn)簡(jiǎn)易內(nèi)存監(jiān)控

    這篇文章主要介紹了python實(shí)現(xiàn)簡(jiǎn)易內(nèi)存監(jiān)控,每隔3秒獲取系統(tǒng)內(nèi)存,當(dāng)內(nèi)存超過(guò)設(shè)定的警報(bào)值時(shí),獲取所有進(jìn)程占用內(nèi)存并發(fā)出警報(bào)聲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評(píng)論

句容市| 盐山县| 漳州市| 彭州市| 额济纳旗| 临朐县| 温泉县| 呼和浩特市| 永福县| 平武县| 汾西县| 中方县| 濮阳县| 谢通门县| 金寨县| 浑源县| 铅山县| 苏尼特右旗| 库伦旗| 灵宝市| 高台县| 庆阳市| 农安县| 乌苏市| 吉安市| 太原市| 安龙县| 庄河市| 本溪| 都匀市| 连平县| 龙游县| 阿合奇县| 湖北省| 崇明县| 岳池县| 易门县| 衡南县| 牡丹江市| 玉门市| 滦南县|