用理工科思維看待這個(gè)世界
崇尚的學(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
結(jié)果:
改:
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
:完成zhangsan
向lisi
轉(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"操作不成功.")
效果顯示:
執(zhí)行后:
zhangsan existes.
lisi existes.
Enough money!
減款成功
加款成功
第二次執(zhí)行的初始狀態(tài):
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)著)