版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
PyMySQL的安裝和操作新工科建設(shè)之路·數(shù)據(jù)科學(xué)與大數(shù)據(jù)系列Python實戰(zhàn)之數(shù)據(jù)庫應(yīng)用和數(shù)據(jù)庫獲取第三章1PyMySQL的介紹與安裝1.PyMySQL的介紹與安裝為了使Pytho連接數(shù)據(jù)庫,需要一個驅(qū)動,這個驅(qū)動是用于與數(shù)據(jù)庫交互的庫。在Python3.x版本中,PyMySQL是從Python連接到MySQL數(shù)據(jù)庫服務(wù)器的接口,在Python2中則使MySQLDB.PyMySQL的目標是成為MySQLDB的替代品。PyMySQL是一個開源項目,支持如下Python版本:Python2,Python2.7,Python3及以上。PyMySQL遵循Python數(shù)據(jù)庫APIv2.O規(guī)范,包含pure-PythonMySQL客戶端庫。在使用PyMySQL前,需要確保計算機上安裝了PyMySQL.如果沒有安裝PyMySQL,在Windows、Linux或Mac系統(tǒng)下,都可以通過如下命令安裝(使用pip或pip3):1.PyMySQL的介紹與安裝怎么檢查PyMySQL是否安裝成功?檢查比較簡單,如在Windows系統(tǒng)中,可以按如下操作進行檢查。打開命令提示符:然后輸入如下命令:若安裝成功,則輸入“importpymysql”命令后,光標會定位到下一行命令提示符,否則會提示如下錯誤信息:1.PyMySQL的介紹與安裝若在執(zhí)行import語句時出現(xiàn)“ModuleNotFoundError:Nomodulenamed'pymysql'”這樣的提示,則表示pymysql模塊尚未安裝,使用上面的安裝語句進行安裝即可。注意:使用pp安裝模塊時,可能需要管理員或rOot權(quán)限,安裝時根據(jù)提示正確執(zhí)行即可。2PyMySQL連接MySQL數(shù)據(jù)庫2.PyMySQL連接MySQL數(shù)據(jù)庫PyMySQL安裝成功后,就可以連接MySQL數(shù)據(jù)庫了。在連接之前有兩個概念要先理解:連接對象和游標對象。連接(Connect)對象:用MySQL服務(wù)器表示套接字。獲取此類實例的正確方法是調(diào)用connect(方法建立與MySQL數(shù)據(jù)庫的連接。連接對象中幾個關(guān)鍵參數(shù)的解釋如下(全部參數(shù)的解釋參見附錄B).2.PyMySQL連接MySQL數(shù)據(jù)庫獲取數(shù)據(jù)庫連接的基本語法如下:host:數(shù)據(jù)庫服務(wù)器所在的主機。user:以登錄身份登錄的用戶名。password:.要使用的密碼。database:要使用的數(shù)據(jù)庫,設(shè)置為None,則指不使用特定的數(shù)據(jù)庫。pot:要使用的MySQL端口,默認即可(默認值為3306)。其中的參數(shù)對應(yīng)上面參數(shù)解釋中的值。2.PyMySQL連接MySQL數(shù)據(jù)庫一般使用連接對象時,還會使用連接對象的如下方法。close():發(fā)送退出消息并關(guān)閉套接字。commit():提交更改到穩(wěn)定存儲。cursor(cursor=-None):創(chuàng)建一個新游標以執(zhí)行查詢。cursor參數(shù)指要創(chuàng)建的游標類型,即Cursor、SSCursor、.DictCursor、SSDictCursor之一,None指使用Cursor.rollback():回滾當前事務(wù)。這里大概介紹,后面示例中使用時會有更詳盡的描述。游標(Cursor)對象:這是用于與數(shù)據(jù)庫交互的對象。2.PyMySQL連接MySQL數(shù)據(jù)庫不要自己創(chuàng)建Cursor實例,調(diào)用connections..Connection.cursor()即可。游標對象的方法如下。close():關(guān)閉光標,會釋放所有剩余數(shù)據(jù)。execute(query,args-None):執(zhí)行查詢。其中,quey(字符型)參數(shù)為需要執(zhí)行的查詢。rgs(元組、列表或字典類型)為與查詢一起使用的參數(shù)(可選)。返回受影響的行數(shù)(如果有),返回數(shù)據(jù)的類型為INT.
fetchone():獲取一行。fetchall():獲取所有行。fetchmany(sizc=None):獲取指定的size行。這里大概介紹,后面示例中使用時會有更詳盡的描述。2.PyMySQL連接MySQL數(shù)據(jù)庫下面是使用PyMySQL連接MySOL數(shù)據(jù)庫的示例(mysql_conn_exp.py):執(zhí)行程序,得到執(zhí)行結(jié)果如下:2.PyMySQL連接MySQL數(shù)據(jù)庫對mysql_conn_exp.py中代碼的解釋如下。代碼importpymysql:導(dǎo)入pymysql庫。代碼db=pymysql.connect("localhost","root","root","data_school"):打開數(shù)據(jù)庫連接,參數(shù)值對應(yīng)如下:host賦值為localhost,.因為連接的是本地,非本地連接要填寫對應(yīng)的P地址。user賦值為root,用戶名為root.password賦值為root,這是一個權(quán)限最高的用戶,實際應(yīng)用中要慎用這么高權(quán)限的用戶名和密碼。database賦值為data_school,是在第2章中已經(jīng)創(chuàng)建好的一個數(shù)據(jù)庫,這里直接拿來使用。2.PyMySQL連接MySQL數(shù)據(jù)庫該行代碼也可以寫成如下形式:或?qū)懗扇缦滦问?,效果也是一樣的。代碼cursor=db.cursor():用數(shù)據(jù)庫連接對象的cursor()方法創(chuàng)建一個游標對象cursor。代碼cursor..execute(("SELECTVERSIONO):用游標對象的execute(方法執(zhí)行查詢。代碼data=cursor.fetchone():用游標對象的fetchone()方法獲取單條數(shù)據(jù)。代碼d.close():關(guān)閉數(shù)據(jù)庫連接。這里是對MySQL數(shù)據(jù)庫連接的簡單介紹,接下來展示對MySQL數(shù)據(jù)庫的更多操作。3PyMySQL對MySQL數(shù)據(jù)庫的基本操作3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作3.1數(shù)據(jù)庫插入操作現(xiàn)在需要通過編寫Python代碼把“小強”信息插入到python_class表中,“小強”信息為:number為1005,name為小強,class_name為Python快樂學(xué)習(xí)班。實現(xiàn)示例代碼如下(insert_exp_01.py):3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作執(zhí)行insert_exp01.py文件前先查看python_class表中的數(shù)據(jù)情況:執(zhí)行insert_exp_01.py文件后,python_class表中的數(shù)據(jù)情況如下:3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作由結(jié)果可知,小強的信息已成功插入pythonclass表中。文件insert_exp_01.py的代碼也可以寫成insert_exp._02py所示示例:該代碼的執(zhí)行效果和insert_exp_01.py文件中代碼執(zhí)行效果一致。在該示例代碼中,不要忘記寫mit()這行代碼,對于MySQL的更改操作,需要顯式做事務(wù)的提交操作,否則會導(dǎo)致數(shù)據(jù)庫中數(shù)據(jù)未成功寫入,即數(shù)據(jù)丟失。3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作3.2數(shù)據(jù)庫查詢操作如查看python_class表中number為1002的學(xué)生的所有信息,通過Python實現(xiàn)的示例代碼如下(selectexp.py):3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作執(zhí)行該示例代碼,得到的結(jié)果如下:3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作3.3數(shù)據(jù)庫更新操作若小張改名為小李,需要你在pythonclass表中將他的name值更改為小李,其他信息不變。實現(xiàn)示例代碼如下(update_cxp.py):3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作執(zhí)行以上代碼,可以從MySQL命令控制臺查看執(zhí)行結(jié)果。當然,前面已學(xué)習(xí)了數(shù)據(jù)庫查詢操作,可以結(jié)合Python的函數(shù)編寫方式,將pdate_exp.py中的代碼改寫為如下新的形式(update_exp_01.py):3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作執(zhí)行update_cxp_01.py文件中的代碼,得到輸出結(jié)果如下:3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作3.4刪除操作通過Python代碼也可以對MySQL數(shù)據(jù)庫進行別除操作?,F(xiàn)在需要將pythonclass表中number為1005的記錄刪除,示例代碼如下(delete_exp.py):3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作執(zhí)行該示例代碼,得到執(zhí)行結(jié)果如下:3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作3.5執(zhí)行事務(wù)前面的示例代碼中多處出現(xiàn)db.rollbackO這樣的代碼,含義是發(fā)生錯誤時回滾。為什么有些操作需要回滾,有些卻不需要呢?這就涉及事務(wù)問題,而事務(wù)機制可以確保數(shù)據(jù)一致性。事務(wù)具有4個屬性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。這4個屬性通常稱為ACD特性,在第1章已經(jīng)講解。在對數(shù)據(jù)庫表做操作時,對數(shù)據(jù)庫表的插入、更新、刪除操作都會涉及對數(shù)據(jù)的變更,為確保數(shù)據(jù)的一致性,一般這三個操作要在發(fā)生錯誤時做數(shù)據(jù)回滾,查詢操作不會更改數(shù)據(jù),不需要做數(shù)據(jù)的回滾。對于支持事務(wù)的數(shù)據(jù)庫,在Pytho加數(shù)據(jù)庫編程中,當游標建立時,就自動開始了一個隱形的數(shù)據(jù)庫事務(wù)。Commit()方法中,游標的所有更新操作在遇到rollbackO方法時都會回滾當前游標的所有操作。每個commitO方法都開始了一個新的事務(wù)。3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作3.6錯誤處理同Python程序一樣,通過Python代碼操作MySQL數(shù)據(jù)庫時會經(jīng)常遇到不同數(shù)據(jù)庫層的異常,DBAPI中定義了一些數(shù)據(jù)庫操作的異常,如表3-1所示。3.PyMySQL對MySQL數(shù)據(jù)庫的基本操作4PyMySQL操作多表4.PyMySQL操作多表到目前為止,所有操作都是在單表上操作的,實際應(yīng)用中,在一個SQL語句中操作多張表的操作是比較常見的。本節(jié)介紹Python代碼通過PyMySQL操作MySQL中多張表的操作。在dataschool庫中準備另一個表:學(xué)生地址表staddr,包含學(xué)生學(xué)號、學(xué)生家庭住址等信息。staddr表的創(chuàng)建通過Python代碼實現(xiàn),實現(xiàn)如下(create_table_exp.py):執(zhí)行代碼后,通過指令面板查看MySQL數(shù)據(jù)庫表,結(jié)果如下:4.PyMySQL操作多表由結(jié)果可知,data_school中已經(jīng)新增了一個名為staddr的表。創(chuàng)建st_addr表后,用批量插入的方式向表中插入幾條數(shù)據(jù),代碼如下(query_exp.py):4.PyMySQL操作多表執(zhí)行代碼,得到結(jié)果如下:4.PyMySQL操作多表由執(zhí)行結(jié)果可知,批量插入成功,數(shù)據(jù)查詢也成功。現(xiàn)在需要查number為1002的同學(xué)的name和addr,怎樣能更方便查找呢?
這里需要引進MySQL連接的使用。“連接”概念在第2章有提到,但沒有展開,這里對這個概念做一個補充。4.PyMySQL操作多表MySQL中一般通過JON在兩個或多個表中查詢數(shù)據(jù),即一般通過JON做連接查詢。按照功能,JON大致分為如下三類:
①NNERJOIN(內(nèi)連接,或等值連接,可以直接寫成JON):獲取兩個表中字段匹配關(guān)系的記錄。比如,A、B兩張表做內(nèi)連接,查詢到的記錄是既在A表又在B表的記錄,相當于數(shù)學(xué)中兩個集合的交集。②LEFTJOIN(左連接):獲取左表所有記錄,即使右表沒有對應(yīng)匹配的記錄。比如A、B兩張表做左連接,A為左表,B為右表,左連接得到的查詢結(jié)果是A表所有滿足條件的記錄都顯示,B表滿足條件的顯示對應(yīng)結(jié)果,不滿足條件的顯示空,保持和A表查找到的記錄條數(shù)一致。即以A表為標準,B表不夠的以空填補。③RIGHTJOIN(右連接):與LEFTJOIN相反,用于獲取右表所有記錄,即使左表沒有對應(yīng)匹配的記錄。比如,A、B兩張表做右連接,A為左表,B為右表,右連接得到的查詢結(jié)果是B表所有滿足條件的記錄都顯示,A表滿足條件的顯示對應(yīng)結(jié)果,不滿足條件的顯示空,保持與B表查找到的記錄條數(shù)一致。即以B表為標準,A表不夠的以空填補。4.PyMySQL操作多表查找number為1002的同學(xué)的name和add止r這個需求需要通過內(nèi)連接來實現(xiàn),在MySQL指令面板中的寫法及結(jié)果如下:由結(jié)果可知,使用JON得到了想要的結(jié)果。這里需要注意后面的條件開始用的是ON,不是WHERE.接下來看Python代碼的實現(xiàn)方式,示例如下(mult_table_query_exp.py):4.PyMySQL操作多表查找number為1002的同學(xué)的name和add止r這個需求需要通過內(nèi)連接來實現(xiàn),在MySQL指令面板中的寫法及結(jié)果如下:由結(jié)果可知,使用JON得到了想要的結(jié)果。這里需要注意后面的條件開始用的是ON,不是WHERE.接下來看Python代碼的實現(xiàn)方式,示例如下(mult_table_query_exp.py):4.PyMySQL操作多表4.PyMySQL操作多表執(zhí)行以上代碼,得到執(zhí)行結(jié)果如下:由結(jié)果可知,以上代碼已實現(xiàn)多表的連接操作。多表的連接操作還支持更改和刪除等操作,此處不具體舉例,大家可以自行嘗試。4.PyMySQL操作多表5高級封裝5.高級封裝從3.3節(jié)和3.4節(jié)的代碼中可以看到,每個PY文件中都出現(xiàn)了不少需要重復(fù)編寫的代碼段,如下面兩段代碼,幾乎每個PY文件中都要編寫一遍:那么,這些代碼是否可以封裝到一個PY文件中,從而在需要時直接調(diào)用呢?答案是可以的,現(xiàn)在在chapter3.目錄下創(chuàng)建一個名為common的目錄,在其下創(chuàng)建一個為mysql_conn.py的文件。在mysql_conn.py中按如下方式添加代碼。創(chuàng)建一個名為MySQLConnection的類,代碼如下:觀察前面編寫的打開數(shù)據(jù)庫連接的語句,在MySQLConnection類中創(chuàng)建一個初始化方法,方法定義如下:其中,5個參數(shù)分別對應(yīng)host、user、password、database和port.port默認值為3306,即MySQL連接的默認端口號。這5個參數(shù)對應(yīng)MySQL數(shù)據(jù)庫連接的5個基本參數(shù),除了pot參數(shù),缺少其中任何一個參數(shù)都不能連接MySQL.這里定義了參數(shù)初始化方法,但只是參數(shù),還需打開數(shù)據(jù)庫連接。5.高級封裝在MySQLConnection類中增加如下代碼:其中,5個參數(shù)分別對應(yīng)host、user、password、database和port.port默認值為3306,即MySQL連接的默認端口號。這5個參數(shù)對應(yīng)MySQL數(shù)據(jù)庫連接的5個基本參數(shù),除了pot參數(shù),缺少其中任何一個參數(shù)都不能連接MySQL.這里定義了參數(shù)初始化方法,但只是參數(shù),還需打開數(shù)據(jù)庫連接。5.高級封裝get_db()方法中實現(xiàn)了打開數(shù)據(jù)庫連接的方式,并最終返回數(shù)據(jù)庫連接對象。得數(shù)據(jù)庫連接對象后,還需要獲取操作游標,但獲取操作游標時需要數(shù)據(jù)庫連接對象,所以需要在init()方法中初始化數(shù)據(jù)庫連接對象。init()方法更改如下:增加一行初始化獲取數(shù)據(jù)庫連接對象的代碼。同時,在MySQLConnection類中增加如下方法:5.高級封裝由conn():方法即可得到操作游標。得到操作游標后,需要在MySQLConnection初始化時先初始化,在init()方法中增加一行代碼。Init()方法更改如下:至此,MySQLConnection類的初始化就完成了。當然,在實際應(yīng)用中,close()方法也是重復(fù)編寫比較多的,把close()方法也封裝到類MySQLConnection中。在MySQLConnection類中添加close()方法的代碼如下:至此,MySQLConnection類的初始化就完成了。當然,在實際應(yīng)用中,close0方法也是重復(fù)編寫比較多的,把close0方法也封裝到類MySQLConnection中。在MySQLConnection類中添加close(0方法的代碼如下:5.高級封裝這些代碼添加完成后,MySQLConnection類的代碼結(jié)構(gòu)如下:5.高級封裝
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度車展場地租賃與媒體合作合同3篇
- 2025年度農(nóng)產(chǎn)品出口質(zhì)量保障合同3篇
- 2025年度個人環(huán)保項目貸款合同(含環(huán)保指標達標)4篇
- 二零二五年度承包工地食堂員工心理健康關(guān)愛合同3篇
- 汕尾2025年廣東汕尾陸河縣第一批城鎮(zhèn)公益性崗位招聘筆試歷年參考題庫附帶答案詳解
- 數(shù)字化時代的學(xué)生管理與德育工作變革
- 二零二五年度倉儲設(shè)施租賃與運輸服務(wù)合同3篇
- 普洱2024年云南普洱市科學(xué)技術(shù)局城鎮(zhèn)公益性崗位工作人員招聘筆試歷年參考題庫附帶答案詳解
- 昭通2025年云南昭通巧家縣人力資源和社會保障局零星選調(diào)工作人員筆試歷年參考題庫附帶答案詳解
- 社交媒體時代孩子的行為模式與心理變化
- JT-T-496-2018公路地下通信管道高密度聚乙烯硅芯塑料管
- 人員密集場所消防安全管理培訓(xùn)
- 《聚焦客戶創(chuàng)造價值》課件
- PTW-UNIDOS-E-放射劑量儀中文說明書
- JCT587-2012 玻璃纖維纏繞增強熱固性樹脂耐腐蝕立式貯罐
- 保險學(xué)(第五版)課件全套 魏華林 第0-18章 緒論、風(fēng)險與保險- 保險市場監(jiān)管、附章:社會保險
- 典范英語2b課文電子書
- 員工信息登記表(標準版)
- 17~18世紀意大利歌劇探析
- 春節(jié)工地停工復(fù)工計劃安排( 共10篇)
- 何以中國:公元前2000年的中原圖景
評論
0/150
提交評論