Python操作MySQL

在學(xué)習(xí)的過(guò)程中總免不了需要使用大量的數(shù)據(jù)节芥。而這些數(shù)據(jù)一般都存在數(shù)據(jù)庫(kù)中,當(dāng)需要使用的時(shí)候就可以通過(guò)連接數(shù)據(jù)庫(kù)進(jìn)行增刪改查等操作宛官。

而數(shù)據(jù)庫(kù)又可以分為關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)迹缀。關(guān)系型數(shù)據(jù)庫(kù)中常見(jiàn)的有mysql,oracle等种远。非關(guān)系型數(shù)據(jù)庫(kù)有MongoDB等涩澡。相信在學(xué)習(xí)爬蟲(chóng)的過(guò)程中對(duì)MongoDB的基本使用都已經(jīng)了解了。那今天看一下mysql的基本使用方法坠敷。

python與mysql的橋梁

python是非常不錯(cuò)的"兩門(mén)語(yǔ)言"妙同,所以在py2和py3中使用的連接mysql的模塊有點(diǎn)變化;py2中一般使用MySqldb來(lái)調(diào)用Mysql膝迎,但是在py3中不支持該包粥帚,則使用pymysql來(lái)代替了。

現(xiàn)在python的版本都到3.7了限次,所以還是老老實(shí)實(shí)的使用pymysql吧芒涡。安裝pymysql非常簡(jiǎn)單,只需要pip一下就可以了

pymysql的簡(jiǎn)單操作

數(shù)據(jù)庫(kù)的連接卖漫,基本操作增刪改查费尽,還有事務(wù)處理的能力可以說(shuō)是程序員的基本功。所以從這幾個(gè)方面入手羊始,了解一下pymysql旱幼。

1.連接

連接非常簡(jiǎn)單只需要使用pymysql的connect方法就可以了。

例如:

import pymysql

connection = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123456',
    database='test',
    charset='utf8')

host為數(shù)據(jù)庫(kù)的主機(jī)IP地址突委,port為MySQL的默認(rèn)端口號(hào)柏卤,user為數(shù)據(jù)的用戶名冬三,password為數(shù)據(jù)庫(kù)的登錄密碼,db為數(shù)據(jù)庫(kù)的名稱(chēng)缘缚。
注意:charset="utf8",中間沒(méi)有空格勾笆,因?yàn)閙ySql不支持

看到?jīng)]有password=‘123456’,這就是前段時(shí)間華住脫庫(kù)的元兇忙灼。當(dāng)然我們只是在本機(jī)測(cè)試匠襟,123456就123456吧钝侠,誰(shuí)叫它簡(jiǎn)單又好記呢该园。

2.MySQL的游標(biāo)

在開(kāi)始操作mysql之前,先介紹一下MySQL的游標(biāo)(cursor)帅韧。它是mysql中一個(gè)重要的概念里初,它有幾個(gè)特性:

  1. 有數(shù)據(jù)緩沖的思想:游標(biāo)的設(shè)計(jì)是一種數(shù)據(jù)緩沖區(qū)的思想,用來(lái)存放SQL語(yǔ)句執(zhí)行的結(jié)果忽舟。
  2. 有數(shù)據(jù)基礎(chǔ):游標(biāo)是在先從數(shù)據(jù)表中檢索出數(shù)據(jù)之后才能繼續(xù)靈活操作的技術(shù)双妨。
  3. 類(lèi)似于指針:游標(biāo)類(lèi)似于指向數(shù)據(jù)結(jié)構(gòu)堆棧中的指針,用來(lái)pop出所指向的數(shù)據(jù)叮阅,并且只能每次取一個(gè)刁品。

上面看讀懂沒(méi)關(guān)系『评眩總的來(lái)說(shuō)挑随,想要操作數(shù)據(jù)庫(kù),就先要拿到游標(biāo)勒叠,具體獲取方法兜挨,參考下面的例子。

假設(shè)接下來(lái)的例子都是建立在數(shù)據(jù)庫(kù)中已經(jīng)新建好的user表的基礎(chǔ)上運(yùn)行的:

CREATE TABLE `user` (
  `id` varchar(20) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.增加

使用insert來(lái)將數(shù)據(jù)插入數(shù)據(jù)庫(kù)

import pymysql

connection = pymysql.connect(
    port=3306,
    user='root',
    password='123456',
    database='test')
cursor = connection.cursor() # 獲取cursor
cursor.execute('INSERT INTO USER(name, id) VALUES (%s, %s);',['DonLex', 1]) # 執(zhí)行sql語(yǔ)句

connection.close()# 關(guān)閉數(shù)據(jù)連接

可以看到眯分,cursor的獲取非常簡(jiǎn)單拌汇。執(zhí)行sql語(yǔ)句也是易于理解的。

最后一定不要忘記了使用close()關(guān)閉數(shù)據(jù)連接弊决。

4.刪除

有一句話:“從刪庫(kù)到跑路”噪舀;可見(jiàn)刪除數(shù)據(jù)是一件非常危險(xiǎn)的操作。而一般做這些危險(xiǎn)操作飘诗,都需要添加事務(wù)与倡,這里為了簡(jiǎn)單,就不添加事務(wù)了疚察。

import pymysql

connection = pymysql.connect(
    port=3306,
    user='root',
    password='123456',
    database='test')
cursor = connection.cursor() # 獲取cursor
sql = "DELETE FROM USER WHERE id=%s;" #使用%s進(jìn)行占位
cursor.execute(sql, [0]) 
connection.close()# 關(guān)閉數(shù)據(jù)連接

5.修改

使用update來(lái)修改蒸走,通過(guò)set設(shè)置新的值,where代表選擇條件

import pymysql

connection = pymysql.connect(
    port=3306,
    user='root',
    password='123456',
    database='test')
cursor = connection.cursor() # 獲取cursor

# 修改數(shù)據(jù)的SQL語(yǔ)句
sql = "UPDATE USER SET id=%s WHERE name=%s;"
id = 0
name = "DonLex"

# 執(zhí)行SQL語(yǔ)句
cursor.execute(sql, [id, name])
connection.close()# 關(guān)閉數(shù)據(jù)連接

6.查詢

查詢則使用select來(lái)選擇貌嫡,from后面跟著表名比驻,where是選擇條件

import pymysql

connection = pymysql.connect(
    port=3306,
    user='root',
    password='123456',
    database='test')
cursor = connection.cursor() # 獲取cursor
cursor.execute('select * from user where id = %s', ('0',)) # 執(zhí)行sql語(yǔ)句

values = cursor.fetchone() # 獲取單條數(shù)據(jù)
print(values)
connection.close()# 關(guān)閉數(shù)據(jù)連接

獲取單條數(shù)據(jù)使用fecthone();當(dāng)獲取多條數(shù)據(jù)時(shí)该溯,則需要使用fecthall()

#查詢數(shù)據(jù)庫(kù)多條數(shù)據(jù)
result = cursor.fetchall()
for data in result:
    print(data)

7.事務(wù)

終于到數(shù)據(jù)庫(kù)的重量級(jí)內(nèi)容了。查了一下别惦,關(guān)于事務(wù)的定義如下:

事務(wù)就是一組原子性的SQL查詢狈茉,或者說(shuō)一個(gè)獨(dú)立的工作單元。如果數(shù)據(jù)庫(kù)引擎能夠成功地對(duì)數(shù)據(jù)應(yīng)用該組查詢的全部語(yǔ)句掸掸,那么久執(zhí)行該組查詢氯庆。如果其中任何一條語(yǔ)句因?yàn)楸罎⒒蚱渌驘o(wú)法執(zhí)行,那么所有語(yǔ)句都不會(huì)執(zhí)行扰付。也就是說(shuō)堤撵,事務(wù)內(nèi)的語(yǔ)句,要么全部執(zhí)行成功羽莺,要么全部執(zhí)行失敗实昨。

事務(wù)的四大特性(ACID):
  1. 原子性(atomicity)
  2. 一致性(consistency)
  3. 隔離性(isolation)
  4. 持久性(durability)
實(shí)現(xiàn)代碼
import pymysql

connection = pymysql.connect(
    port=3306,
    user='root',
    password='123456',
    database='test')
cursor = connection.cursor()
sql = "DELETE FROM USER WHERE id=%s;"
try:
    cursor.execute(sql, [1])
    # 提交事務(wù)
    connection.commit()
except Exception as e:
    # 有異常,回滾事務(wù)
    connection.rollback()

connection.close()

從上面的代碼中可以看到盐固,execute()執(zhí)行刪除操作使用try...except包起來(lái)了荒给。如果在執(zhí)行try的部分出錯(cuò)的話,就回滾刁卜,否則就提交事務(wù)志电。

更多精彩內(nèi)容,敬請(qǐng)關(guān)注微信公眾號(hào):Python綠洲

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛔趴,一起剝皮案震驚了整個(gè)濱河市挑辆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夺脾,老刑警劉巖之拨,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異咧叭,居然都是意外死亡蚀乔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)菲茬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吉挣,“玉大人,你說(shuō)我怎么就攤上這事婉弹〔腔辏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵镀赌,是天一觀的道長(zhǎng)氯哮。 經(jīng)常有香客問(wèn)我,道長(zhǎng)商佛,這世上最難降的妖魔是什么喉钢? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任姆打,我火速辦了婚禮,結(jié)果婚禮上肠虽,老公的妹妹穿的比我還像新娘幔戏。我一直安慰自己,他們只是感情好税课,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布闲延。 她就那樣靜靜地躺著,像睡著了一般韩玩。 火紅的嫁衣襯著肌膚如雪垒玲。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天啸如,我揣著相機(jī)與錄音侍匙,去河邊找鬼氮惯。 笑死叮雳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妇汗。 我是一名探鬼主播帘不,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼杨箭!你這毒婦竟也來(lái)了寞焙?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤互婿,失蹤者是張志新(化名)和其女友劉穎捣郊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體慈参,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呛牲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驮配。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娘扩。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖壮锻,靈堂內(nèi)的尸體忽然破棺而出琐旁,到底是詐尸還是另有隱情,我是刑警寧澤猜绣,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布灰殴,位于F島的核電站,受9級(jí)特大地震影響掰邢,放射性物質(zhì)發(fā)生泄漏牺陶。R本人自食惡果不足惜擅羞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望义图。 院中可真熱鬧减俏,春花似錦、人聲如沸碱工。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)怕篷。三九已至历筝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間廊谓,已是汗流浹背梳猪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒸痹,地道東北人春弥。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像叠荠,于是被迫代替她去往敵國(guó)和親匿沛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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

  • Python操作MySQL 一. python操作數(shù)據(jù)庫(kù)介紹 Python 標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)接口為 Python DB-...
    shu_ke閱讀 573評(píng)論 0 3
  • 安裝MySQLdb 首先要安裝MySQLdb模塊榛鼎,用來(lái)訪問(wèn)數(shù)據(jù)庫(kù)逃呼。MySQLdb 是用于Python鏈接Mysql...
    隨風(fēng)化作雨閱讀 596評(píng)論 3 4
  • Python標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)接口為Python DB-API,為開(kāi)發(fā)人員提供了數(shù)據(jù)庫(kù)應(yīng)用編程接口者娱。接口支持多數(shù)據(jù)庫(kù): G...
    小呀小芒果閱讀 2,682評(píng)論 0 3
  • 01 昨晚經(jīng)過(guò)聯(lián)通大廈的時(shí)候抡笼,看見(jiàn)一個(gè)中年女子推著自行車(chē)靠馬路邊站著。夜很黑黄鳍,但仔細(xì)看看推姻,還是能看得出自行車(chē)已經(jīng)破...
    晚來(lái)舟閱讀 898評(píng)論 2 8
  • 今天周二,感覺(jué)一天一天過(guò)的真快凹势稹拾碌!大寶像往常一樣寫(xiě)著作業(yè),我則做飯照看小寶街望,想想日子就是這樣校翔,平淡溫馨! ...
    兆木兆木閱讀 134評(píng)論 0 0