專(zhuān)欄:008:MySQLdb及其銀行模擬轉(zhuǎn)賬

用理工科思維看待這個(gè)世界

系列爬蟲(chóng)專(zhuān)欄

崇尚的學(xué)習(xí)思維是:輸入抵窒,輸出平衡丑孩,且平衡點(diǎn)不斷攀升。

曾經(jīng)有大神告誡說(shuō):沒(méi)事別瞎寫(xiě)文章火本;所以危队,很認(rèn)真的寫(xiě)的是能力范圍內(nèi)的,看客要是看不懂钙畔,不是你的問(wèn)題茫陆,問(wèn)題在我,得持續(xù)輸入擎析,再輸出簿盅。

今天的主題是:MySQLdb及其銀行模擬轉(zhuǎn)賬

1:框架

序號(hào) 內(nèi)容 說(shuō)明
01 概念及其工具介紹 --
02 SQL語(yǔ)句 --
03 實(shí)例演示數(shù)據(jù)庫(kù)操作 --
04 銀行轉(zhuǎn)賬操作演示 --
05 參考及其說(shuō)明 --

2:概念,工具介紹

  • MySQL:關(guān)系型數(shù)據(jù)庫(kù)
    MySQL(官方發(fā)音為英語(yǔ)發(fā)音:/ma? ??skju???l/“My S-Q-L”[1]揍魂,但也經(jīng)常讀作英語(yǔ)發(fā)音:/ma? ?si?kw?l/“My Sequel”)原本是一個(gè)開(kāi)放源代碼的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)桨醋,原開(kāi)發(fā)者為瑞典的MySQL AB公司,該公司于2008年被昇陽(yáng)微系統(tǒng)(Sun Microsystems)收購(gòu)现斋。2009年喜最,甲骨文公司(Oracle)收購(gòu)昇陽(yáng)微系統(tǒng)公司,MySQL成為Oracle旗下產(chǎn)品步责。

  • MySQL 服務(wù)器的 下載:官網(wǎng)

  • python MySQL 驅(qū)動(dòng) 安裝: 下載安裝

  • python MySQL 開(kāi)發(fā)環(huán)境

01:Python 集成開(kāi)發(fā)環(huán)境編寫(xiě)SQL語(yǔ)句
02:python客戶(hù)端 + python MySQL 驅(qū)動(dòng)
03:MySQL 服務(wù)器:MySQL客戶(hù)端工具

本地需要先開(kāi)啟MySQL服務(wù)返顺,python編寫(xiě)SQL語(yǔ)句,驅(qū)動(dòng)完成python和MySQL之間的聯(lián)系蔓肯。這樣就可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)數(shù)據(jù)的增刪改查遂鹊。


3:SQL語(yǔ)句

  • SQL語(yǔ)句
    SQL是用于訪(fǎng)問(wèn)和處理數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)的計(jì)算機(jī)語(yǔ)言:
    教程w3school
    基本操作:增刪改查

  • 查:
    SELECT 列名稱(chēng) FROM 表名稱(chēng)
    一個(gè)名為"Persons"的表:提取LastName列:select LastName from Persons

001.png

結(jié)果:


002.png
  • 改:
    UPDATE 表名稱(chēng) SET 列名稱(chēng) = 新值 WHERE 列名稱(chēng) = 某值

  • 增:
    01:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) 02:INSERT INTO 表名稱(chēng) VALUES (值1, 值2,....)

  • 刪:
    DELETE FROM 表名稱(chēng) WHERE 列名稱(chēng) = 值

還有好些高級(jí)的用法....點(diǎn)這里

這里主要講解在python中的使用。


4:代碼演示

  • MySQLdb

01: 創(chuàng)建連接對(duì)象

序號(hào) 方法 使用說(shuō)明
01 MySQLdb.connet() 創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象

|參數(shù)|類(lèi)型|說(shuō)明|
|---|---|
|host|字符串|MySQL服務(wù)器地址蔗包,本地:localhost|
|port|數(shù)字|MySQL服務(wù)器端口號(hào)|
|user|字符串|用戶(hù)名秉扑,默認(rèn)root|
|passwd|字符串|密碼,默認(rèn)空|
|db|字符串|數(shù)據(jù)庫(kù)名稱(chēng)|
|charset|字符串|連接編碼|

02:連接對(duì)象支持的方法

方法名 說(shuō)明
cursor() 游標(biāo)對(duì)象:用于查詢(xún)和獲取結(jié)果
commit() 提交當(dāng)前事務(wù)
rollback() 回滾當(dāng)前事務(wù)
close() 關(guān)閉連接

03:游標(biāo)對(duì)象 所支持的方法

方法 說(shuō)明
execute() 執(zhí)行一個(gè)數(shù)據(jù)庫(kù)查詢(xún)和命令
fetchone() 取結(jié)果集的下一個(gè)
fetchmany(size) 獲取結(jié)果集下幾行
fetchall() 獲取剩下的所有
rowcount 最近一次execute影響的行數(shù)
close() 關(guān)閉游標(biāo)對(duì)象

04:使用MySQLdb的方法流程

  • connection:建立數(shù)據(jù)庫(kù)連接
  • cursor: 執(zhí)行SQL,獲取數(shù)據(jù)庫(kù)數(shù)據(jù)
  • 提交事務(wù)或者回滾操作
  • 關(guān)閉cursor,關(guān)閉connection連接對(duì)象

數(shù)據(jù)庫(kù)可視化工具:SQLyog (有好些舟陆,看你自己喜好了)
在本地已經(jīng)手工創(chuàng)建了一個(gè)db = exercise的數(shù)據(jù)庫(kù)误澳,表名為:persons如圖:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
# 獲取第一行
import MySQLdb
connector = MySQLdb.connect(
    user="root",
    host="localhost",
    port=3306,
    passwd="123456",
    db="exercise",
    charset="utf8")  # 創(chuàng)建連接對(duì)象
cur = connector.cursor()  # 創(chuàng)建游標(biāo)對(duì)象
sql = 'select * from persons WHERE id =1' # 編寫(xiě)的Sql語(yǔ)句
cur.execute(sql) # 使用游標(biāo)對(duì)象的執(zhí)行方法 
print(cur.fetchone()) # 使用右邊對(duì)象的獲取方法
# output
(1, 'Adams', 'John', 'Oxford Street', 'London')
# 第一行的FirstName 更改成 'xiexiaolu'
sql2 = "UPDATE persons SET FirstName = 'xiexiaolu' WHERE id = 1"
cur.execute(sql2)

# 表數(shù)據(jù)變成
(1, 'Adams', 'xiexiaolu', 'Oxford Street', 'London')
(2, 'Bush', 'George', 'Fifth Avenue', 'New York')
(3, 'Carter', 'Thomas', 'Changan Street', 'Beijing')

# 增加一條數(shù)據(jù)
sql3 ="INSERT INTO persons(Id, LastName,FirstName,Address,City)VALUES (4, 'xiaolu', 'xie','zhabei','shanghai')"

# output
(1, 'Adams', 'John', 'Oxford Street', 'London')
(2, 'Bush', 'George', 'Fifth Avenue', 'New York')
(3, 'Carter', 'Thomas', 'Changan Street', 'Beijing')
(4, 'xiaolu', 'xie', 'zhabei', 'shanghai')

更多操作


5:銀行轉(zhuǎn)賬操作演示

模擬銀行兩個(gè)賬戶(hù)之間的資金流動(dòng):
流程:

  • 檢查賬戶(hù)是否存在
  • 檢查賬戶(hù)是否存在足夠的資金
  • A賬戶(hù) - 資金
  • B賬戶(hù) + 資金

表名為:bank:完成zhangsanlisi轉(zhuǎn)賬100元

id money
zhangsan 110
lisi 10
# 檢查賬戶(hù)
def check_account(self, account_id):
    cur =  self.con.cursor()
    sql = 'select * from bank WHERE id ="%s"' % (str(account_id))
    cur.execute(sql)
    if cur.rowcount == 1:
        print("%s existes."%(account_id))
    else:
        print("%s is wrong" % account_id)

# 檢查是否有足夠的錢(qián)
def check_money(self, values, account_id):
    cur = self.con.cursor()
    sql = 'select * from bank WHERE id="%s" AND money>%s' % (account_id, values)
    cur.execute(sql)
    print(cur.rowcount)
    if cur.rowcount == 1:
        print("Enough money!")
        return True
    else:
        print("No enough money!")
        return False
# 減款操作
def subtract(self, accout_id, tranfer_money, Flag):
    cur = self.con.cursor()
    if Flag:
        try:
            sql = 'update bank SET money = money - %s where id = "%s"' % (tranfer_money, accout_id)
            cur.execute(sql)
            print(cur.rowcount)
            if cur.rowcount == 1:
                print(u"減款成功")
        finally:
            cur.close()
    else:
        print(u"操作不成功.")

#加款操作
def add(self, accout_id, tranfer_money, Flag):
    cur = self.con.cursor()
    if Flag:
        try:
            sql = 'update bank SET money = money + %s WHERE id = "%s"' % (tranfer_money, accout_id)
            cur.execute(sql)
            print(cur.rowcount)
            if cur.rowcount ==1:
                print(u"加款成功")
        finally:
            cur.close()
    else:
        print(u"操作不成功.")

效果顯示:

005.png

執(zhí)行后:

006.png
zhangsan existes.
lisi existes.
Enough money!
減款成功
加款成功

第二次執(zhí)行的初始狀態(tài):

006.png

zhangsan existes.
lisi existes.
0
No enough money!
操作不成功.
操作不成功.

完整版代碼:完整代碼
數(shù)據(jù)庫(kù)的學(xué)習(xí)是為了完成爬蟲(chóng)數(shù)據(jù)的儲(chǔ)存。


6:參考及其說(shuō)明

參考列表:
01: 參考1
02: 參考2
03:參考:慕課網(wǎng)

Github:github

關(guān)于本人:

國(guó)內(nèi)小碩秦躯,半路出家的IT學(xué)習(xí)者忆谓。
興趣領(lǐng)域:爬蟲(chóng) , 數(shù)據(jù)科學(xué)
本人正在構(gòu)建一個(gè)共同成長(zhǎng)爬蟲(chóng)小型社群踱承。有興趣私信倡缠。
文檔及代碼托管在Github上。

下期預(yù)告:爬取豆瓣電影茎活,并存儲(chǔ)在數(shù)據(jù)庫(kù)中...(為啥都爬豆瓣來(lái)著)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末昙沦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子载荔,更是在濱河造成了極大的恐慌盾饮,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懒熙,死亡現(xiàn)場(chǎng)離奇詭異丘损,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)煌珊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)号俐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人定庵,你說(shuō)我怎么就攤上這事吏饿。” “怎么了蔬浙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵猪落,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我畴博,道長(zhǎng)笨忌,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任俱病,我火速辦了婚禮官疲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亮隙。我一直安慰自己途凫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布溢吻。 她就那樣靜靜地躺著维费,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上犀盟,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天而晒,我揣著相機(jī)與錄音,去河邊找鬼阅畴。 笑死倡怎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恶阴。 我是一名探鬼主播诈胜,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼豹障,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼冯事!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起血公,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤昵仅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后累魔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體摔笤,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年垦写,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吕世。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梯投,死狀恐怖命辖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情分蓖,我是刑警寧澤尔艇,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站么鹤,受9級(jí)特大地震影響终娃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蒸甜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一棠耕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柠新,春花似錦窍荧、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春咕痛,著一層夾襖步出監(jiān)牢的瞬間痢甘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工茉贡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留塞栅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓腔丧,卻偏偏與公主長(zhǎng)得像放椰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子愉粤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容