【Ch03】PyMySQL的安裝和操作_第1頁(yè)
【Ch03】PyMySQL的安裝和操作_第2頁(yè)
【Ch03】PyMySQL的安裝和操作_第3頁(yè)
【Ch03】PyMySQL的安裝和操作_第4頁(yè)
【Ch03】PyMySQL的安裝和操作_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

PyMySQL的安裝和操作新工科建設(shè)之路·數(shù)據(jù)科學(xué)與大數(shù)據(jù)系列Python實(shí)戰(zhàn)之?dāng)?shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)庫(kù)獲取第三章1PyMySQL的介紹與安裝1.PyMySQL的介紹與安裝為了使Pytho連接數(shù)據(jù)庫(kù),需要一個(gè)驅(qū)動(dòng),這個(gè)驅(qū)動(dòng)是用于與數(shù)據(jù)庫(kù)交互的庫(kù)。在Python3.x版本中,PyMySQL是從Python連接到MySQL數(shù)據(jù)庫(kù)服務(wù)器的接口,在Python2中則使MySQLDB.PyMySQL的目標(biāo)是成為MySQLDB的替代品。PyMySQL是一個(gè)開(kāi)源項(xiàng)目,支持如下Python版本:Python2,Python2.7,Python3及以上。PyMySQL遵循Python數(shù)據(jù)庫(kù)APIv2.O規(guī)范,包含pure-PythonMySQL客戶端庫(kù)。在使用PyMySQL前,需要確保計(jì)算機(jī)上安裝了PyMySQL.如果沒(méi)有安裝PyMySQL,在Windows、Linux或Mac系統(tǒng)下,都可以通過(guò)如下命令安裝(使用pip或pip3):1.PyMySQL的介紹與安裝怎么檢查PyMySQL是否安裝成功?檢查比較簡(jiǎn)單,如在Windows系統(tǒng)中,可以按如下操作進(jìn)行檢查。打開(kāi)命令提示符:然后輸入如下命令:若安裝成功,則輸入“importpymysql”命令后,光標(biāo)會(huì)定位到下一行命令提示符,否則會(huì)提示如下錯(cuò)誤信息:1.PyMySQL的介紹與安裝若在執(zhí)行import語(yǔ)句時(shí)出現(xiàn)“ModuleNotFoundError:Nomodulenamed'pymysql'”這樣的提示,則表示pymysql模塊尚未安裝,使用上面的安裝語(yǔ)句進(jìn)行安裝即可。注意:使用pp安裝模塊時(shí),可能需要管理員或rOot權(quán)限,安裝時(shí)根據(jù)提示正確執(zhí)行即可。2PyMySQL連接MySQL數(shù)據(jù)庫(kù)2.PyMySQL連接MySQL數(shù)據(jù)庫(kù)PyMySQL安裝成功后,就可以連接MySQL數(shù)據(jù)庫(kù)了。在連接之前有兩個(gè)概念要先理解:連接對(duì)象和游標(biāo)對(duì)象。連接(Connect)對(duì)象:用MySQL服務(wù)器表示套接字。獲取此類實(shí)例的正確方法是調(diào)用connect(方法建立與MySQL數(shù)據(jù)庫(kù)的連接。連接對(duì)象中幾個(gè)關(guān)鍵參數(shù)的解釋如下(全部參數(shù)的解釋參見(jiàn)附錄B).2.PyMySQL連接MySQL數(shù)據(jù)庫(kù)獲取數(shù)據(jù)庫(kù)連接的基本語(yǔ)法如下:host:數(shù)據(jù)庫(kù)服務(wù)器所在的主機(jī)。user:以登錄身份登錄的用戶名。password:.要使用的密碼。database:要使用的數(shù)據(jù)庫(kù),設(shè)置為None,則指不使用特定的數(shù)據(jù)庫(kù)。pot:要使用的MySQL端口,默認(rèn)即可(默認(rèn)值為3306)。其中的參數(shù)對(duì)應(yīng)上面參數(shù)解釋中的值。2.PyMySQL連接MySQL數(shù)據(jù)庫(kù)一般使用連接對(duì)象時(shí),還會(huì)使用連接對(duì)象的如下方法。close():發(fā)送退出消息并關(guān)閉套接字。commit():提交更改到穩(wěn)定存儲(chǔ)。cursor(cursor=-None):創(chuàng)建一個(gè)新游標(biāo)以執(zhí)行查詢。cursor參數(shù)指要?jiǎng)?chuàng)建的游標(biāo)類型,即Cursor、SSCursor、.DictCursor、SSDictCursor之一,None指使用Cursor.rollback():回滾當(dāng)前事務(wù)。這里大概介紹,后面示例中使用時(shí)會(huì)有更詳盡的描述。游標(biāo)(Cursor)對(duì)象:這是用于與數(shù)據(jù)庫(kù)交互的對(duì)象。2.PyMySQL連接MySQL數(shù)據(jù)庫(kù)不要自己創(chuàng)建Cursor實(shí)例,調(diào)用connections..Connection.cursor()即可。游標(biāo)對(duì)象的方法如下。close():關(guān)閉光標(biāo),會(huì)釋放所有剩余數(shù)據(jù)。execute(query,args-None):執(zhí)行查詢。其中,quey(字符型)參數(shù)為需要執(zhí)行的查詢。rgs(元組、列表或字典類型)為與查詢一起使用的參數(shù)(可選)。返回受影響的行數(shù)(如果有),返回?cái)?shù)據(jù)的類型為INT.

fetchone():獲取一行。fetchall():獲取所有行。fetchmany(sizc=None):獲取指定的size行。這里大概介紹,后面示例中使用時(shí)會(huì)有更詳盡的描述。2.PyMySQL連接MySQL數(shù)據(jù)庫(kù)下面是使用PyMySQL連接MySOL數(shù)據(jù)庫(kù)的示例(mysql_conn_exp.py):執(zhí)行程序,得到執(zhí)行結(jié)果如下:2.PyMySQL連接MySQL數(shù)據(jù)庫(kù)對(duì)mysql_conn_exp.py中代碼的解釋如下。代碼importpymysql:導(dǎo)入pymysql庫(kù)。代碼db=pymysql.connect("localhost","root","root","data_school"):打開(kāi)數(shù)據(jù)庫(kù)連接,參數(shù)值對(duì)應(yīng)如下:host賦值為localhost,.因?yàn)檫B接的是本地,非本地連接要填寫(xiě)對(duì)應(yīng)的P地址。user賦值為root,用戶名為root.password賦值為root,這是一個(gè)權(quán)限最高的用戶,實(shí)際應(yīng)用中要慎用這么高權(quán)限的用戶名和密碼。database賦值為data_school,是在第2章中已經(jīng)創(chuàng)建好的一個(gè)數(shù)據(jù)庫(kù),這里直接拿來(lái)使用。2.PyMySQL連接MySQL數(shù)據(jù)庫(kù)該行代碼也可以寫(xiě)成如下形式:或?qū)懗扇缦滦问?,效果也是一樣的。代碼cursor=db.cursor():用數(shù)據(jù)庫(kù)連接對(duì)象的cursor()方法創(chuàng)建一個(gè)游標(biāo)對(duì)象cursor。代碼cursor..execute(("SELECTVERSIONO):用游標(biāo)對(duì)象的execute(方法執(zhí)行查詢。代碼data=cursor.fetchone():用游標(biāo)對(duì)象的fetchone()方法獲取單條數(shù)據(jù)。代碼d.close():關(guān)閉數(shù)據(jù)庫(kù)連接。這里是對(duì)MySQL數(shù)據(jù)庫(kù)連接的簡(jiǎn)單介紹,接下來(lái)展示對(duì)MySQL數(shù)據(jù)庫(kù)的更多操作。3PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作3.1數(shù)據(jù)庫(kù)插入操作現(xiàn)在需要通過(guò)編寫(xiě)Python代碼把“小強(qiáng)”信息插入到python_class表中,“小強(qiáng)”信息為:number為1005,name為小強(qiáng),class_name為Python快樂(lè)學(xué)習(xí)班。實(shí)現(xiàn)示例代碼如下(insert_exp_01.py):3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作執(zhí)行insert_exp01.py文件前先查看python_class表中的數(shù)據(jù)情況:執(zhí)行insert_exp_01.py文件后,python_class表中的數(shù)據(jù)情況如下:3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作由結(jié)果可知,小強(qiáng)的信息已成功插入pythonclass表中。文件insert_exp_01.py的代碼也可以寫(xiě)成insert_exp._02py所示示例:該代碼的執(zhí)行效果和insert_exp_01.py文件中代碼執(zhí)行效果一致。在該示例代碼中,不要忘記寫(xiě)mit()這行代碼,對(duì)于MySQL的更改操作,需要顯式做事務(wù)的提交操作,否則會(huì)導(dǎo)致數(shù)據(jù)庫(kù)中數(shù)據(jù)未成功寫(xiě)入,即數(shù)據(jù)丟失。3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作3.2數(shù)據(jù)庫(kù)查詢操作如查看python_class表中number為1002的學(xué)生的所有信息,通過(guò)Python實(shí)現(xiàn)的示例代碼如下(selectexp.py):3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作執(zhí)行該示例代碼,得到的結(jié)果如下:3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作3.3數(shù)據(jù)庫(kù)更新操作若小張改名為小李,需要你在pythonclass表中將他的name值更改為小李,其他信息不變。實(shí)現(xiàn)示例代碼如下(update_cxp.py):3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作執(zhí)行以上代碼,可以從MySQL命令控制臺(tái)查看執(zhí)行結(jié)果。當(dāng)然,前面已學(xué)習(xí)了數(shù)據(jù)庫(kù)查詢操作,可以結(jié)合Python的函數(shù)編寫(xiě)方式,將pdate_exp.py中的代碼改寫(xiě)為如下新的形式(update_exp_01.py):3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作執(zhí)行update_cxp_01.py文件中的代碼,得到輸出結(jié)果如下:3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作3.4刪除操作通過(guò)Python代碼也可以對(duì)MySQL數(shù)據(jù)庫(kù)進(jìn)行別除操作?,F(xiàn)在需要將pythonclass表中number為1005的記錄刪除,示例代碼如下(delete_exp.py):3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作執(zhí)行該示例代碼,得到執(zhí)行結(jié)果如下:3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作3.5執(zhí)行事務(wù)前面的示例代碼中多處出現(xiàn)db.rollbackO這樣的代碼,含義是發(fā)生錯(cuò)誤時(shí)回滾。為什么有些操作需要回滾,有些卻不需要呢?這就涉及事務(wù)問(wèn)題,而事務(wù)機(jī)制可以確保數(shù)據(jù)一致性。事務(wù)具有4個(gè)屬性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。這4個(gè)屬性通常稱為ACD特性,在第1章已經(jīng)講解。在對(duì)數(shù)據(jù)庫(kù)表做操作時(shí),對(duì)數(shù)據(jù)庫(kù)表的插入、更新、刪除操作都會(huì)涉及對(duì)數(shù)據(jù)的變更,為確保數(shù)據(jù)的一致性,一般這三個(gè)操作要在發(fā)生錯(cuò)誤時(shí)做數(shù)據(jù)回滾,查詢操作不會(huì)更改數(shù)據(jù),不需要做數(shù)據(jù)的回滾。對(duì)于支持事務(wù)的數(shù)據(jù)庫(kù),在Pytho加數(shù)據(jù)庫(kù)編程中,當(dāng)游標(biāo)建立時(shí),就自動(dòng)開(kāi)始了一個(gè)隱形的數(shù)據(jù)庫(kù)事務(wù)。Commit()方法中,游標(biāo)的所有更新操作在遇到rollbackO方法時(shí)都會(huì)回滾當(dāng)前游標(biāo)的所有操作。每個(gè)commitO方法都開(kāi)始了一個(gè)新的事務(wù)。3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作3.6錯(cuò)誤處理同Python程序一樣,通過(guò)Python代碼操作MySQL數(shù)據(jù)庫(kù)時(shí)會(huì)經(jīng)常遇到不同數(shù)據(jù)庫(kù)層的異常,DBAPI中定義了一些數(shù)據(jù)庫(kù)操作的異常,如表3-1所示。3.PyMySQL對(duì)MySQL數(shù)據(jù)庫(kù)的基本操作4PyMySQL操作多表4.PyMySQL操作多表到目前為止,所有操作都是在單表上操作的,實(shí)際應(yīng)用中,在一個(gè)SQL語(yǔ)句中操作多張表的操作是比較常見(jiàn)的。本節(jié)介紹Python代碼通過(guò)PyMySQL操作MySQL中多張表的操作。在dataschool庫(kù)中準(zhǔn)備另一個(gè)表:學(xué)生地址表staddr,包含學(xué)生學(xué)號(hào)、學(xué)生家庭住址等信息。staddr表的創(chuàng)建通過(guò)Python代碼實(shí)現(xiàn),實(shí)現(xiàn)如下(create_table_exp.py):執(zhí)行代碼后,通過(guò)指令面板查看MySQL數(shù)據(jù)庫(kù)表,結(jié)果如下:4.PyMySQL操作多表由結(jié)果可知,data_school中已經(jīng)新增了一個(gè)名為staddr的表。創(chuàng)建st_addr表后,用批量插入的方式向表中插入幾條數(shù)據(jù),代碼如下(query_exp.py):4.PyMySQL操作多表執(zhí)行代碼,得到結(jié)果如下:4.PyMySQL操作多表由執(zhí)行結(jié)果可知,批量插入成功,數(shù)據(jù)查詢也成功?,F(xiàn)在需要查number為1002的同學(xué)的name和addr,怎樣能更方便查找呢?

這里需要引進(jìn)MySQL連接的使用。“連接”概念在第2章有提到,但沒(méi)有展開(kāi),這里對(duì)這個(gè)概念做一個(gè)補(bǔ)充。4.PyMySQL操作多表MySQL中一般通過(guò)JON在兩個(gè)或多個(gè)表中查詢數(shù)據(jù),即一般通過(guò)JON做連接查詢。按照功能,JON大致分為如下三類:

①NNERJOIN(內(nèi)連接,或等值連接,可以直接寫(xiě)成JON):獲取兩個(gè)表中字段匹配關(guān)系的記錄。比如,A、B兩張表做內(nèi)連接,查詢到的記錄是既在A表又在B表的記錄,相當(dāng)于數(shù)學(xué)中兩個(gè)集合的交集。②LEFTJOIN(左連接):獲取左表所有記錄,即使右表沒(méi)有對(duì)應(yīng)匹配的記錄。比如A、B兩張表做左連接,A為左表,B為右表,左連接得到的查詢結(jié)果是A表所有滿足條件的記錄都顯示,B表滿足條件的顯示對(duì)應(yīng)結(jié)果,不滿足條件的顯示空,保持和A表查找到的記錄條數(shù)一致。即以A表為標(biāo)準(zhǔn),B表不夠的以空填補(bǔ)。③RIGHTJOIN(右連接):與LEFTJOIN相反,用于獲取右表所有記錄,即使左表沒(méi)有對(duì)應(yīng)匹配的記錄。比如,A、B兩張表做右連接,A為左表,B為右表,右連接得到的查詢結(jié)果是B表所有滿足條件的記錄都顯示,A表滿足條件的顯示對(duì)應(yīng)結(jié)果,不滿足條件的顯示空,保持與B表查找到的記錄條數(shù)一致。即以B表為標(biāo)準(zhǔn),A表不夠的以空填補(bǔ)。4.PyMySQL操作多表查找number為1002的同學(xué)的name和add止r這個(gè)需求需要通過(guò)內(nèi)連接來(lái)實(shí)現(xiàn),在MySQL指令面板中的寫(xiě)法及結(jié)果如下:由結(jié)果可知,使用JON得到了想要的結(jié)果。這里需要注意后面的條件開(kāi)始用的是ON,不是WHERE.接下來(lái)看Python代碼的實(shí)現(xiàn)方式,示例如下(mult_table_query_exp.py):4.PyMySQL操作多表查找number為1002的同學(xué)的name和add止r這個(gè)需求需要通過(guò)內(nèi)連接來(lái)實(shí)現(xiàn),在MySQL指令面板中的寫(xiě)法及結(jié)果如下:由結(jié)果可知,使用JON得到了想要的結(jié)果。這里需要注意后面的條件開(kāi)始用的是ON,不是WHERE.接下來(lái)看Python代碼的實(shí)現(xiàn)方式,示例如下(mult_table_query_exp.py):4.PyMySQL操作多表4.PyMySQL操作多表執(zhí)行以上代碼,得到執(zhí)行結(jié)果如下:由結(jié)果可知,以上代碼已實(shí)現(xiàn)多表的連接操作。多表的連接操作還支持更改和刪除等操作,此處不具體舉例,大家可以自行嘗試。4.PyMySQL操作多表5高級(jí)封裝5.高級(jí)封裝從3.3節(jié)和3.4節(jié)的代碼中可以看到,每個(gè)PY文件中都出現(xiàn)了不少需要重復(fù)編寫(xiě)的代碼段,如下面兩段代碼,幾乎每個(gè)PY文件中都要編寫(xiě)一遍:那么,這些代碼是否可以封裝到一個(gè)PY文件中,從而在需要時(shí)直接調(diào)用呢?答案是可以的,現(xiàn)在在chapter3.目錄下創(chuàng)建一個(gè)名為common的目錄,在其下創(chuàng)建一個(gè)為mysql_conn.py的文件。在mysql_conn.py中按如下方式添加代碼。創(chuàng)建一個(gè)名為MySQLConnection的類,代碼如下:觀察前面編寫(xiě)的打開(kāi)數(shù)據(jù)庫(kù)連接的語(yǔ)句,在MySQLConnection類中創(chuàng)建一個(gè)初始化方法,方法定義如下:其中,5個(gè)參數(shù)分別對(duì)應(yīng)host、user、password、database和port.port默認(rèn)值為3306,即MySQL連接的默認(rèn)端口號(hào)。這5個(gè)參數(shù)對(duì)應(yīng)MySQL數(shù)據(jù)庫(kù)連接的5個(gè)基本參數(shù),除了pot參數(shù),缺少其中任何一個(gè)參數(shù)都不能連接MySQL.這里定義了參數(shù)初始化方法,但只是參數(shù),還需打開(kāi)數(shù)據(jù)庫(kù)連接。5.高級(jí)封裝在MySQLConnection類中增加如下代碼:其中,5個(gè)參數(shù)分別對(duì)應(yīng)host、user、password、database和port.port默認(rèn)值為3306,即MySQL連接的默認(rèn)端口號(hào)。這5個(gè)參數(shù)對(duì)應(yīng)MySQL數(shù)據(jù)庫(kù)連接的5個(gè)基本參數(shù),除了pot參數(shù),缺少其中任何一個(gè)參數(shù)都不能連接MySQL.這里定義了參數(shù)初始化方法,但只是參數(shù),還需打開(kāi)數(shù)據(jù)庫(kù)連接。5.高級(jí)封裝get_db()方法中實(shí)現(xiàn)了打開(kāi)數(shù)據(jù)庫(kù)連接的方式,并最終返回?cái)?shù)據(jù)庫(kù)連接對(duì)象。得數(shù)據(jù)庫(kù)連接對(duì)象后,還需要獲取操作游標(biāo),但獲取操作游標(biāo)時(shí)需要數(shù)據(jù)庫(kù)連接對(duì)象,所以需要在init()方法中初始化數(shù)據(jù)庫(kù)連接對(duì)象。init()方法更改如下:增加一行初始化獲取數(shù)據(jù)庫(kù)連接對(duì)象的代碼。同時(shí),在MySQLConnection類中增加如下方法:5.高級(jí)封裝由conn():方法即可得到操作游標(biāo)。得到操作游標(biāo)后,需要在MySQLConnection初始化時(shí)先初始化,在init()方法中增加一行代碼。Init()方法更改如下:至此,MySQLConnection類的初始化就完成了。當(dāng)然,在實(shí)際應(yīng)用中,close()方法也是重復(fù)編寫(xiě)比較多的,把close()方法也封裝到類MySQLConnection中。在MySQLConnection類中添加close()方法的代碼如下:至此,MySQLConnection類的初始化就完成了。當(dāng)然,在實(shí)際應(yīng)用中,close0方法也是重復(fù)編寫(xiě)比較多的,把close0方法也封裝到類MySQLConnection中。在MySQLConnection類中添加close(0方法的代碼如下:5.高級(jí)封裝這些代碼添加完成后,MySQLConnection類的代碼結(jié)構(gòu)如下:5.高級(jí)封裝

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論