新聞中心
隨著數(shù)據(jù)庫(kù)系統(tǒng)的不斷發(fā)展,越來(lái)越多的高校將數(shù)據(jù)庫(kù)系統(tǒng)作為計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)的必修課程。在這門(mén)課程中,涉及到許多重要的概念,如數(shù)據(jù)建模、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)管理和數(shù)據(jù)查詢(xún)等等。為了讓學(xué)生更好地理解這些概念,提高他們的實(shí)踐能力和理論知識(shí),許多教師開(kāi)始在數(shù)據(jù)庫(kù)系統(tǒng)課程的設(shè)計(jì)中使用Python語(yǔ)言。Python是一種高級(jí)編程語(yǔ)言,它具有簡(jiǎn)單易學(xué)、擴(kuò)展性好、可讀性強(qiáng)等特點(diǎn),非常適合在數(shù)據(jù)庫(kù)系統(tǒng)的學(xué)習(xí)和教學(xué)中應(yīng)用。本文將詳細(xì)介紹。

目前創(chuàng)新互聯(lián)建站已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、博羅網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
一、Python在數(shù)據(jù)建模中的應(yīng)用
數(shù)據(jù)建模是數(shù)據(jù)庫(kù)系統(tǒng)課程中的核心概念之一。它是指將現(xiàn)實(shí)世界中的實(shí)體、屬性、關(guān)系和約束等概念抽象成一個(gè)“模型”,以便設(shè)計(jì)和管理數(shù)據(jù)庫(kù)系統(tǒng)。Python在數(shù)據(jù)建模中的應(yīng)用有以下幾個(gè)方面:
1.1 類(lèi)建模
Python中的類(lèi)和對(duì)象是一個(gè)非常好的數(shù)據(jù)建模工具。在數(shù)據(jù)庫(kù)系統(tǒng)課程中,可以使用Python的類(lèi)來(lái)建模各種類(lèi)型的實(shí)體,比如公司、員工、學(xué)生、課程等等。例如,在Python中,可以創(chuàng)建一個(gè)名為“Person”的類(lèi)來(lái)表示公司中的員工,該類(lèi)可以包括各種屬性,如姓名、年齡、性別、號(hào)碼等等。
1.2 UML建模
UML是一種通用的建模語(yǔ)言,它可以在設(shè)計(jì)數(shù)據(jù)庫(kù)系統(tǒng)時(shí)使用。使用Python可以幫助學(xué)生更好地理解UML建模概念,從而更好地掌握數(shù)據(jù)建模技能。
1.3 ORM框架
ORM框架是Python中非常流行的一種數(shù)據(jù)庫(kù)工具,它可以將Python對(duì)象映射到數(shù)據(jù)庫(kù)中的表格。這可以使學(xué)生更容易地將數(shù)據(jù)建模轉(zhuǎn)化為數(shù)據(jù)庫(kù)中的實(shí)現(xiàn)。ORM框架有很多種,比如Django ORM和SQLAlchemy等等。使用ORM框架,學(xué)生可以更快地實(shí)現(xiàn)復(fù)雜的查詢(xún)和修改操作。
二、Python在數(shù)據(jù)存儲(chǔ)中的應(yīng)用
數(shù)據(jù)存儲(chǔ)是數(shù)據(jù)庫(kù)系統(tǒng)課程中的另一個(gè)重要的概念。在Python中,可以使用多種方式來(lái)存儲(chǔ)數(shù)據(jù),包括文件、ON、XML、MySQL、PostgreSQL等等。Python在數(shù)據(jù)存儲(chǔ)中的應(yīng)用如下:
2.1 文件存儲(chǔ)
使用Python的文件系統(tǒng)可以非常方便地存儲(chǔ)和讀取數(shù)據(jù)。在數(shù)據(jù)庫(kù)系統(tǒng)課程中,學(xué)生可以使用Python的文件系統(tǒng)來(lái)演示如何將數(shù)據(jù)從數(shù)據(jù)庫(kù)中導(dǎo)出為文件,并從文件中讀取數(shù)據(jù),以便學(xué)生更清楚地了解數(shù)據(jù)的存儲(chǔ)和讀取方式。
2.2 MySQL和PostgreSQL
MySQL和PostgreSQL是Python中非常流行的關(guān)系型數(shù)據(jù)庫(kù)。它們具有優(yōu)秀的性能和可靠性,能夠存儲(chǔ)大量的數(shù)據(jù)。在數(shù)據(jù)庫(kù)系統(tǒng)課程中,可以使用MySQL和PostgreSQL來(lái)演示如何創(chuàng)建表格、插入數(shù)據(jù)和查詢(xún)數(shù)據(jù)等等操作。學(xué)生可以通過(guò)Python和MySQL或PostgreSQL來(lái)實(shí)現(xiàn)很多實(shí)際的數(shù)據(jù)存儲(chǔ)操作。
三、Python在數(shù)據(jù)管理中的應(yīng)用
數(shù)據(jù)管理是數(shù)據(jù)庫(kù)系統(tǒng)課程的另一個(gè)重要概念。在Python中,可以使用許多模塊來(lái)管理數(shù)據(jù),如Pandas、NumPy、SciPy等等。Python在數(shù)據(jù)管理中的應(yīng)用如下:
3.1 Pandas
Pandas是一個(gè)Python數(shù)據(jù)分析庫(kù)。它提供了容易使用、高效的數(shù)據(jù)結(jié)構(gòu),能夠處理各種類(lèi)型的數(shù)據(jù)格式,如CSV、Excel、SQL、ON等等。在數(shù)據(jù)庫(kù)系統(tǒng)課程中,學(xué)生可以使用Pandas來(lái)演示如何讀取和處理不同類(lèi)型的數(shù)據(jù)。此外,Pandas還可以用于數(shù)據(jù)清洗、數(shù)據(jù)可視化和數(shù)據(jù)統(tǒng)計(jì)等等任務(wù)。
3.2 NumPy
NumPy是一個(gè)Python科學(xué)計(jì)算庫(kù)。它提供了許多高性能、多維數(shù)組和矩陣操作,能夠非常方便地處理數(shù)組和矩陣數(shù)據(jù)。在數(shù)據(jù)庫(kù)系統(tǒng)課程中,可以使用NumPy來(lái)演示如何對(duì)數(shù)據(jù)進(jìn)行聚合、計(jì)算等等操作。此外,NumPy還可以用于科學(xué)計(jì)算、數(shù)據(jù)分析等等任務(wù)。
四、Python在數(shù)據(jù)查詢(xún)中的應(yīng)用
數(shù)據(jù)查詢(xún)是數(shù)據(jù)庫(kù)系統(tǒng)課程中最重要的概念之一。在Python中,可以使用許多模塊來(lái)查詢(xún)數(shù)據(jù),如SQLite、MySQL、PostgreSQL等等。Python在數(shù)據(jù)查詢(xún)中的應(yīng)用如下:
4.1 SQLite
SQLite是一種輕量級(jí)的文件型數(shù)據(jù)庫(kù)系統(tǒng),非常適合在Python中進(jìn)行數(shù)據(jù)查詢(xún)。在數(shù)據(jù)庫(kù)系統(tǒng)課程中,可以使用SQLite來(lái)演示如何進(jìn)行數(shù)據(jù)查詢(xún)和更新,以便讓學(xué)生更充分地了解數(shù)據(jù)庫(kù)的應(yīng)用。
4.2 MySQL和PostgreSQL
MySQL和PostgreSQL是Python中非常流行的關(guān)系型數(shù)據(jù)庫(kù),能夠存儲(chǔ)大量的數(shù)據(jù)。在數(shù)據(jù)庫(kù)系統(tǒng)課程中,可以使用MySQL和PostgreSQL來(lái)演示如何進(jìn)行數(shù)據(jù)查詢(xún)和更新,以便讓學(xué)生更充分地了解數(shù)據(jù)庫(kù)的應(yīng)用。
五、
本文詳細(xì)介紹了。Python在數(shù)據(jù)建模、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)管理和數(shù)據(jù)查詢(xún)等方面都有非常廣泛的應(yīng)用。它能夠幫助學(xué)生更好地理解和掌握數(shù)據(jù)庫(kù)系統(tǒng)的概念和技術(shù),提高他們的實(shí)踐能力和理論知識(shí)。在今后的教學(xué)實(shí)踐中,我們應(yīng)該充分利用Python這個(gè)工具,讓學(xué)生更好地理解和運(yùn)用數(shù)據(jù)庫(kù)系統(tǒng)技術(shù)。
相關(guān)問(wèn)題拓展閱讀:
- 如何使用python連接mysql數(shù)據(jù)庫(kù)
- 如何在python中進(jìn)行數(shù)據(jù)庫(kù)的添加
如何使用python連接mysql數(shù)據(jù)庫(kù)
在 Python 語(yǔ)言環(huán)境下我們這樣連接數(shù)據(jù)庫(kù)。
In : from mysql import connector
In : cnx = connector.connect(host=”172.16.192.100″,port=3306,user=”appuser”,password=”xxxxxx”)
但是連接數(shù)據(jù)庫(kù)的背后發(fā)生了什么呢?
答案
當(dāng)我們通過(guò)驅(qū)動(dòng)程序(mysql-connector-python,pymysql)連接 MySQL 服務(wù)端的時(shí)候,就是把連接參數(shù)傳遞給驅(qū)動(dòng)程序,驅(qū)動(dòng)程序再根據(jù)參數(shù)會(huì)發(fā)起到 MySQL 服務(wù)端的 TCP 連接。當(dāng) TCP 連接建立之后驅(qū)動(dòng)程序與服務(wù)端之間會(huì)按特定的格式和次序交換數(shù)據(jù)包,數(shù)據(jù)包的格式和發(fā)送次序由 MySQL 協(xié)議 規(guī)定。MySQL 協(xié)議: MySQL 服務(wù)端與驅(qū)動(dòng)程序之間,按如下的次序發(fā)送了這些包。
MySQL 服務(wù)凳塵端向客戶(hù)端發(fā)送一個(gè)握手包,包里記錄了 MySQL-Server 的版本,默認(rèn)的授權(quán)插件,密碼鹽值(auth-data)。
2. MySQL 客戶(hù)端發(fā)出 ssl 連接請(qǐng)求包(如果有必要的話)。
3. MySQL 客戶(hù)端發(fā)出握手包的響應(yīng)包,這個(gè)包時(shí)記錄了用戶(hù)名,密碼加密后的串,客戶(hù)端御漏屬性,等等其它信息。
4. MySQL 服務(wù)端發(fā)出響應(yīng)包,這個(gè)包里記錄了登錄棗拆禪是否成功,如果沒(méi)有成功也會(huì)給出錯(cuò)誤信息。
1、和數(shù)據(jù)庫(kù)建立連接2、執(zhí)行sql語(yǔ)句,接收返回值3、關(guān)閉數(shù)據(jù)庫(kù)連接1、MySQL數(shù)據(jù)庫(kù)要用游頌亮MySQLdb模塊,但Python用來(lái)鏈接MySQL的第三方庫(kù)MySQLdb不支持Python3.x特別說(shuō)明:我在我的電腦上實(shí)驗(yàn)時(shí),我的python是2.7.2版本,安裝對(duì)應(yīng)版本的MySQLdb之后直接可以運(yùn)行,并與數(shù)據(jù)庫(kù)連接成功,所以如果大家也像我一樣順利的話,下面的就不需要看了,直接跳過(guò),看第2點(diǎn)如何執(zhí)行sql語(yǔ)句即可!如果安裝之后出現(xiàn)異常,可以參考一下下面的解決法。連接的關(guān)鍵是安裝MySQLdb模塊要下載與Python相對(duì)應(yīng)的版本:下載好后安裝,它會(huì)自動(dòng)檢測(cè)到計(jì)算機(jī)Python的安裝路徑,并自動(dòng)填寫(xiě)模塊解壓路徑(我的是:D:\ProgramFiles\ActivePython2.6.6.17\Lib\site-packages\)。但解壓完成后并不能使用,還要修改MySQLdb模塊下的一些文件:①.在MySQLdb目錄下(我的是:D:\ProgramFiles\ActivePython2.6.6.17\Lib\site-packages\MySQLdb)找到__init__.py:注釋第34、35行的fromsetsimportImmutableSet、classDBAPISet(ImmutableSet):,在后面添加classDBAPISet(frozenset):#fromsetsimportImmutableSet#classDBAPISet(ImmutableSet):classDBAPISet(frozenset):②.打開(kāi)converters.py:注釋第37行的fromsetsimportBaseSet,Set,將第45行的returnSet()中的Set改為set;同樣將第129行的Set:Set2Str,中的Set改為set(不要修改Set2Str),到這里就修改完畢了2.建立數(shù)據(jù)庫(kù)連接importMySQLdbconn=MySQLdb.connect(host=”localhost”,user=”root”,passwd=”sa”,db=”mytable”)比較常用的參數(shù)包括host:連接的數(shù)據(jù)庫(kù)服務(wù)器主機(jī)名,默認(rèn)為本地主機(jī)(localhost)。user:數(shù)據(jù)庫(kù)登陸名.默認(rèn)是當(dāng)前用戶(hù).passwd:數(shù)據(jù)庫(kù)登陸的秘密.默認(rèn)為空.db:要使用的數(shù)據(jù)庫(kù)名.沒(méi)有默認(rèn)值.port:MySQL服務(wù)使用的TCP端口.默認(rèn)是3306.conn連接有兩個(gè)重要的方法commit【提交新增和修改】,rollback【撤銷(xiāo)新增或修改】3、執(zhí)行數(shù)據(jù)庫(kù)操作n=cursor.execute(sql,param)我們櫻歷要使用連接對(duì)象獲得一個(gè)cursor對(duì)象,接下來(lái),我們會(huì)使用cursor提供的方法來(lái)進(jìn)行工作.這些方法包括兩大類(lèi):1.執(zhí)行命令,2.接收返回值cursor用來(lái)執(zhí)行命令的方法:callproc(self,procname,args):用來(lái)執(zhí)行存儲(chǔ)過(guò)程,接收的參數(shù)為存儲(chǔ)過(guò)程名和參數(shù)列表,返回值為受影響的行數(shù)execute(self,query,args):執(zhí)行單條sql語(yǔ)句,接收的參數(shù)為sql語(yǔ)句本身和使用的參數(shù)列表,返回值為受影響的行數(shù)executemany(self,query,args):執(zhí)行單挑sql語(yǔ)句,但是重復(fù)執(zhí)行參數(shù)列表里的參數(shù),返回值為受影響的行數(shù)nextset(self):移動(dòng)到下一個(gè)結(jié)果集cursor用來(lái)接收返回值的方法:fetchall(self):接收全部的返回結(jié)果行.fetchmany(self,size=None):接收size條返回結(jié)果行.如果size的值大于返回的結(jié)果行的數(shù)量,則會(huì)返回cursor.arraysize條數(shù)據(jù).fetchone(self):返回一條結(jié)果行.scroll(self,value,mode=’relative’):移動(dòng)指針到某一行.如果mode=’relative’神寬,則表示從當(dāng)前所在行移動(dòng)value條,如果mode=’absolute’,則表示從結(jié)果集的之一行移動(dòng)value條.下面的代碼是一個(gè)完整的例子.#使用sql語(yǔ)句,這里要接收的參數(shù)都用%s占位符.要注意的是,無(wú)論你要插入的數(shù)據(jù)是什么類(lèi)型,占位符永遠(yuǎn)都要用%ssql=”insertintocdinfovalues(%s,%s,%s,%s,%s)”#param應(yīng)該為tuple或者listparam=(title,singer,imgurl,url,alpha)#執(zhí)行,如果成功,n的值為1n=cursor.execute(sql,param)#再來(lái)執(zhí)行一個(gè)查詢(xún)的操作cursor.execute(“select*fromcdinfo”)#我們使用了fetchall這個(gè)方法.這樣,cds里保存的將會(huì)是查詢(xún)返回的全部結(jié)果.每條結(jié)果都是一個(gè)tuple類(lèi)型的數(shù)據(jù),這些tuple組成了一個(gè)tuplecds=cursor.fetchall()#因?yàn)槭莟uple,所以可以這樣使用結(jié)果集printcds#或者直接顯示出來(lái),看看結(jié)果集的真實(shí)樣子printcds#如果需要批量的插入數(shù)據(jù),就這樣做sql=”insertintocdinfovalues(0,%s,%s,%s,%s,%s)”#每個(gè)值的為一個(gè)tuple,整個(gè)參數(shù)集組成一個(gè)tuple,或者listparam=((title,singer,imgurl,url,alpha),(title2,singer2,imgurl2,url2,alpha2))#使用executemany方法來(lái)批量的插入數(shù)據(jù).這真是一個(gè)很酷的方法!n=cursor.executemany(sql,param)需要注意的是(或者說(shuō)是我感到奇怪的是),在執(zhí)行完插入或刪除或修改操作后,需要調(diào)用一下conn.commit()方法進(jìn)行提交.這樣,數(shù)據(jù)才會(huì)真正保存在數(shù)據(jù)庫(kù)中.我不清楚是否是我的mysql設(shè)置問(wèn)題,總之,今天我在一開(kāi)始使用的時(shí)候,如果不用commit,那數(shù)據(jù)就不會(huì)保留在數(shù)據(jù)庫(kù)中,但是,數(shù)據(jù)確實(shí)在數(shù)據(jù)庫(kù)呆過(guò).因?yàn)樽詣?dòng)編號(hào)進(jìn)行了累積,而且返回的受影響的行數(shù)并不為0.4、關(guān)閉數(shù)據(jù)庫(kù)連接需要分別的關(guān)閉指針對(duì)象和連接對(duì)象.他們有名字相同的方法cursor.close()conn.close()5、5編碼(防止亂碼)需要注意的點(diǎn):1Python文件設(shè)置編碼utf-8(文件前面加上#encoding=utf-8)2MySQL數(shù)據(jù)庫(kù)charset=utf-8ython連接MySQL是加上參數(shù)charset=utf84設(shè)置Python的默認(rèn)編碼為utf-8(sys.setdefaultencoding(utf-8)#encoding=utf-8importsysimportMySQLdbreload(sys)sys.setdefaultencoding(‘utf-8′)db=MySQLdb.connect(user=’root’,charset=’utf8′)注:MySQL的配置文件設(shè)置也必須配置成utf86.模塊功能演示#!/usr/bin/pythonimportMySQLdbCon=MySQLdb.connect(host=’localhost’,user=’root’,passwd=’root’,db=’abc’)cursor=con.cursor()sql=”select*frommyt”cursor.execute(sql)row=cursor.fetchone()printrowcursor.close()con.close()執(zhí)行以下SQL語(yǔ)句獲取返回值://獲取連接的游標(biāo)cursor=conn.cursor()//查詢(xún)sql=”select*from【table】”//新增sql=”insertinto【table】(字段,字段)values(值,值)”//修改sql=”update【table】set字段=‘值’where條件”//刪除sql=”deletefrom【table】where條件”cursor.execute(sql)返回值cur.execute(‘select*fromtables’)其返回值為SQL語(yǔ)句得到的行數(shù),如:2L,表示2行。然后,可以從該對(duì)象的fetchone或fetchall方法得到行信息。獲取行信息指針對(duì)象的fetchone()方法,是每次得到一行的tuple返回值:引用>>>row=cur.fetchone()>>>printrow(‘user1′,’52c69e3ac4e69d3f2e’,1000L,1000L,’/home/FTP/user1′,”)指針對(duì)象的fetchall()方法,可取出指針結(jié)果集中的所有行,返回的結(jié)果集一個(gè)元組(tuples):引用>>>cur.scroll(0,’absolute’)>>>row=cur.fetchall()>>>printrow((‘user1′,’52c69e3ac4e69d3f2e’,1000L,1000L,’/home/FTP/user1′,”),(‘user2′,’7e58d63b60197ceb55a1c487989a3720′,1000L,1000L,’/home/FTP/user2’,None))移動(dòng)指針當(dāng)使用fetchone()方法是,指針是會(huì)發(fā)生移動(dòng)的。所以,若不重置指針,那么使用fetchall的信息將只會(huì)包含指針后面的行內(nèi)容。手動(dòng)移動(dòng)指針使用:cur.scroll(int,parm)含義為:引用int:移動(dòng)的行數(shù),整數(shù);在相對(duì)模式下,正數(shù)向下移動(dòng),負(fù)值表示向上移動(dòng)。parm:移動(dòng)的模式,默認(rèn)是relative,相對(duì)模式;可接受absoulte,絕對(duì)模式。修改數(shù)據(jù)修改數(shù)據(jù),包括插入、更新、刪除。它們都是使用指針對(duì)象的execute()方法執(zhí)行:cur.execute(“insertintotable(row1,row2)values(‘111′,’222’)”)cur.execute(“updatetablesetrow1=’test’whererow2=’row2′”)cur.execute(“deletefromtablewhererow1=’row1′”)因單引號(hào)“’”用于SQL語(yǔ)句中的標(biāo)識(shí),所以,python中的字符串需使用雙引號(hào)括住。此外,也可以使用python的“格式化字符串”寫(xiě)法,簡(jiǎn)化命令,例如:cur.execute(“updatetablesetrow1=’%s’whererow2=’%s'”%(‘value1′,’value2’))※請(qǐng)注意,’%s’的單引號(hào)是SQL語(yǔ)句的間隔符,’value1’的單引號(hào)是python的字符串間隔符,其含義是不同的。是否需要間隔符,以及使用雙引號(hào)還是單引號(hào)作為間隔,需根據(jù)其含義決定。例如,還有:cur.execute(“updateFTPUSERSsetpasswd=%swhereuserid=’%s'”%(“md5(‘123′)”,’user2’))這里,paswd=%s是因SQL的md5()函數(shù)是不需要單引號(hào)間隔的;”md5(‘123’)”是python的字符串中含有單引號(hào),所以用雙引號(hào)括住。提交修改一般情況下,MySQLdb模塊會(huì)自動(dòng)提交修改。但我們?cè)诟聰?shù)據(jù)后,手動(dòng)運(yùn)行一次:conn.commit()關(guān)閉數(shù)據(jù)庫(kù)連接需要分別的關(guān)閉指針對(duì)象和連接對(duì)象.他們有名字相同的方法cursor.close()conn.close()
你可以訪問(wèn)Python數(shù)據(jù)庫(kù)接口及API查看詳細(xì)的支持?jǐn)?shù)據(jù)散清庫(kù)列表。不同的數(shù)據(jù)庫(kù)你需要下載不同的DB API模塊,例如你需要訪問(wèn)Oracle數(shù)據(jù)庫(kù)和Mysql數(shù)據(jù),你需要下載Oracle和MySQL數(shù)據(jù)庫(kù)模塊。
DB-API 是一個(gè)規(guī)范. 它定義了一系列必須的對(duì)象和數(shù)據(jù)庫(kù)存取方式, 以便為各種各樣的底層數(shù)據(jù)庫(kù)系統(tǒng)和多種多樣的數(shù)據(jù)庫(kù)接口程序提供一致的訪問(wèn)接口 。
Python的DB-API,為大多數(shù)的數(shù)據(jù)庫(kù)實(shí)現(xiàn)了接口,使用它連接各數(shù)據(jù)庫(kù)后,就可以用相同的方式操橋掘猜作各數(shù)據(jù)庫(kù)。
Python DB-API使用流程:
引入 API 模塊。
獲取與數(shù)據(jù)庫(kù)的連接。
執(zhí)行SQL語(yǔ)句和存儲(chǔ)過(guò)程。
關(guān)閉數(shù)據(jù)敏型庫(kù)連接。
什么是MySQLdb?
MySQLdb 是用于Python鏈接Mysql數(shù)據(jù)庫(kù)的接口,它實(shí)現(xiàn)了 Python 數(shù)據(jù)庫(kù) API 規(guī)范 V2.0,基于 MySQL C API 上建立的。
如何安裝MySQLdb?
為了用DB-API編寫(xiě)MySQL腳本,必須確保已經(jīng)安裝了MySQL。復(fù)制以下代碼,并執(zhí)行:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
如何在python中進(jìn)行數(shù)據(jù)庫(kù)的添加
你可以訪問(wèn)Python數(shù)據(jù)庫(kù)接口及API查看詳細(xì)的支持?jǐn)?shù)據(jù)庫(kù)列表。不同的數(shù)據(jù)庫(kù)你需要下載不同的DB API模塊,例如你需要訪問(wèn)Oracle數(shù)據(jù)庫(kù)和Mysql數(shù)據(jù),你需要下載Oracle和MySQL數(shù)據(jù)庫(kù)模塊。
DB-API 是一個(gè)規(guī)范. 它定義了一系列必須的對(duì)象和數(shù)據(jù)庫(kù)存取方式, 以便為各種各樣的底層數(shù)據(jù)庫(kù)系統(tǒng)和多種多樣的數(shù)據(jù)庫(kù)接口程序提供一致的訪問(wèn)接口 。
Python的DB-API,為大多數(shù)的數(shù)據(jù)庫(kù)實(shí)現(xiàn)了接口,使用它連接各數(shù)據(jù)庫(kù)后,就可以用相同的方式操作各數(shù)據(jù)庫(kù)。
Python DB-API使用流程:
引入 API 模塊。
獲取與數(shù)據(jù)庫(kù)的連接。
執(zhí)行SQL語(yǔ)句和存儲(chǔ)過(guò)程。
關(guān)閉數(shù)據(jù)庫(kù)連接。
什么是MySQLdb?
MySQLdb 是用于Python鏈接Mysql數(shù)據(jù)庫(kù)的遲伍襪接口,它實(shí)現(xiàn)了 Python 數(shù)據(jù)庫(kù) API 規(guī)范 V2.0,基于 MySQL C API 上建立的。
如何安裝MySQLdb?
為了用DB-API編寫(xiě)MySQL腳本,必須確保已經(jīng)安裝了MySQL。復(fù)制以下代碼,并執(zhí)行:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
如果執(zhí)行后的輸出結(jié)果如下所示,意味著你沒(méi)有安裝 MySQLdb 模塊:
Traceback (most recent call last):
File “test.py”, line 3, in
import MySQLdb
ImportError: No module named MySQLdb
安裝MySQLdb,請(qǐng)?jiān)L問(wèn) ,(Linux平臺(tái)可以訪問(wèn):)從這里可選擇適合您的平臺(tái)的安裝包,分為預(yù)編譯的二進(jìn)制文件和源代碼安裝包。
如果您選擇二進(jìn)制文件橘敗發(fā)行版本的話,安裝過(guò)程基本安裝提示即可完成。如果從源代碼進(jìn)行安裝的話,則需要切換到MySQLdb發(fā)行版本的頂級(jí)目錄,并鍵入下列命令:
$ gunzip MySQL-python-1.2.2.tar.gz
$ tar -xvf MySQL-python-1.2.2.tar
$ cd MySQL-python-1.2.2
$ python setup.py build
$ python setup.py install
注意:請(qǐng)確保您有root權(quán)限來(lái)安裝上述碼激模塊。
數(shù)據(jù)庫(kù)連接
連接數(shù)據(jù)庫(kù)前,請(qǐng)先確認(rèn)以下事項(xiàng):
您已經(jīng)創(chuàng)建了數(shù)據(jù)庫(kù) TESTDB.
在TESTDB數(shù)據(jù)庫(kù)中您已經(jīng)創(chuàng)建了表 EMPLOYEE
EMPLOYEE表字段為 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
連接數(shù)據(jù)庫(kù)TESTDB使用的用戶(hù)名為 “testuser” ,密碼為 “test123”,你可以可以自己設(shè)定或者直接使用root用戶(hù)名及其密碼,Mysql數(shù)據(jù)庫(kù)用戶(hù)授權(quán)請(qǐng)使用Grant命令。
在你的機(jī)子上已經(jīng)安裝了 Python MySQLdb 模塊。
如果您對(duì)sql語(yǔ)句不熟悉,可以訪問(wèn)我們的 SQL基礎(chǔ)教程
實(shí)例:
以下實(shí)例鏈接Mysql的TESTDB數(shù)據(jù)庫(kù):
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect(“l(fā)ocalhost”,”testuser”,”test123″,”TESTDB” )
# 使用cursor()方法獲取操作游標(biāo)
cursor = db.cursor()
# 使用execute方法執(zhí)行SQL語(yǔ)句
cursor.execute(“SELECT VERSION()”)
# 使用 fetchone() 方法獲取一條數(shù)據(jù)庫(kù)。
data = cursor.fetchone()
print “Database version : %s ” % data
# 關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()
執(zhí)行以上腳本輸出結(jié)果如下:
Database version : 5.0.45
創(chuàng)建數(shù)據(jù)庫(kù)表
如果數(shù)據(jù)庫(kù)連接存在我們可以使用execute()方法來(lái)為數(shù)據(jù)庫(kù)創(chuàng)建表,如下所示創(chuàng)建表EMPLOYEE:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect(“l(fā)ocalhost”,”testuser”,”test123″,”TESTDB” )
# 使用cursor()方法獲取操作游標(biāo)
cursor = db.cursor()
# 如果數(shù)據(jù)表已經(jīng)存在使用 execute() 方法刪除表。
cursor.execute(“DROP TABLE IF EXISTS EMPLOYEE”)
# 創(chuàng)建數(shù)據(jù)表SQL語(yǔ)句
sql = “””CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )”””
cursor.execute(sql)
# 關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()
數(shù)據(jù)庫(kù)插入操作
以下實(shí)例使用執(zhí)行 SQL INSERT 語(yǔ)句向表 EMPLOYEE 插入記錄:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect(“l(fā)ocalhost”,”testuser”,”test123″,”TESTDB” )
# 使用cursor()方法獲取操作游標(biāo)
cursor = db.cursor()
# SQL 插入語(yǔ)句
sql = “””INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES (‘Mac’, ‘Mohan’, 20, ‘M’, 2023)”””
try:
# 執(zhí)行sql語(yǔ)句
cursor.execute(sql)
# 提交到數(shù)據(jù)庫(kù)執(zhí)行
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# 關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()
以上例子也可以寫(xiě)成如下形式:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect(“l(fā)ocalhost”,”testuser”,”test123″,”TESTDB” )
# 使用cursor()方法獲取操作游標(biāo)
cursor = db.cursor()
# SQL 插入語(yǔ)句
sql = “INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES (‘%s’, ‘%s’, ‘%d’, ‘%c’, ‘%d’ )” % \
(‘Mac’, ‘Mohan’, 20, ‘M’, 2023)
try:
# 執(zhí)行sql語(yǔ)句
cursor.execute(sql)
# 提交到數(shù)據(jù)庫(kù)執(zhí)行
db.commit()
except:
# 發(fā)生錯(cuò)誤時(shí)回滾
db.rollback()
# 關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()
實(shí)例:
以下代碼使用變量向SQL語(yǔ)句中傳遞參數(shù):
…………………………….
user_id = “test123”
password = “password”
con.execute(‘insert into Login values(“%s”, “%s”)’ % \
(user_id, password))
…………………………….
數(shù)據(jù)庫(kù)查詢(xún)操作
Python查詢(xún)Mysql使用 fetchone() 方法獲取單條數(shù)據(jù), 使用fetchall() 方法獲取多條數(shù)據(jù)。
fetchone(): 該方法獲取下一個(gè)查詢(xún)結(jié)果集。結(jié)果集是一個(gè)對(duì)象
fetchall():接收全部的返回結(jié)果行.
rowcount: 這是一個(gè)只讀屬性,并返回執(zhí)行execute()方法后影響的行數(shù)。
實(shí)例:
查詢(xún)EMPLOYEE表中salary(工資)字段大于1000的所有數(shù)據(jù):
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect(“l(fā)ocalhost”,”testuser”,”test123″,”TESTDB” )
# 使用cursor()方法獲取操作游標(biāo)
cursor = db.cursor()
# SQL 查詢(xún)語(yǔ)句
sql = “SELECT * FROM EMPLOYEE \
WHERE INCOME > ‘%d'” % (1000)
try:
# 執(zhí)行SQL語(yǔ)句
cursor.execute(sql)
# 獲取所有記錄列表
results = cursor.fetchall()
for row in results:
fname = row
lname = row
age = row
sex = row
income = row
# 打印結(jié)果
print “fname=%s,lname=%s,age=%d,sex=%s,income=%d” % \
(fname, lname, age, sex, income )
except:
print “Error: unable to fecth data”
# 關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()
以上腳本執(zhí)行結(jié)果如下:
fname=Mac, lname=Mohan, age=20, sex=M, income=2023
數(shù)據(jù)庫(kù)更新操作
更新操作用于更新數(shù)據(jù)表的的數(shù)據(jù),以下實(shí)例將 TESTDB表中的 SEX 字段全部修改為 ‘M’,AGE 字段遞增1:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect(“l(fā)ocalhost”,”testuser”,”test123″,”TESTDB” )
# 使用cursor()方法獲取操作游標(biāo)
cursor = db.cursor()
# SQL 更新語(yǔ)句
sql = “UPDATE EMPLOYEE SET AGE = AGE + 1
WHERE SEX = ‘%c'” % (‘M’)
try:
# 執(zhí)行SQL語(yǔ)句
cursor.execute(sql)
# 提交到數(shù)據(jù)庫(kù)執(zhí)行
db.commit()
except:
# 發(fā)生錯(cuò)誤時(shí)回滾
db.rollback()
# 關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()
刪除操作
刪除操作用于刪除數(shù)據(jù)表中的數(shù)據(jù),以下實(shí)例演示了刪除數(shù)據(jù)表 EMPLOYEE 中 AGE 大于 20 的所有數(shù)據(jù):
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect(“l(fā)ocalhost”,”testuser”,”test123″,”TESTDB” )
# 使用cursor()方法獲取操作游標(biāo)
cursor = db.cursor()
# SQL 刪除語(yǔ)句
sql = “DELETE FROM EMPLOYEE WHERE AGE > ‘%d'” % (20)
try:
# 執(zhí)行SQL語(yǔ)句
cursor.execute(sql)
# 提交修改
db.commit()
except:
# 發(fā)生錯(cuò)誤時(shí)回滾
db.rollback()
# 關(guān)閉連接
db.close()
執(zhí)行事務(wù)
事務(wù)機(jī)制可以確保數(shù)據(jù)一致性。
事務(wù)應(yīng)該具有4個(gè)屬性:原子性、一致性、隔離性、持久性。這四個(gè)屬性通常稱(chēng)為ACID特性。
原子性(atomicity)。一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)中包括的諸操作要么都做,要么都不做。
一致性(consistency)。事務(wù)必須是使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。一致性與原子性是密切相關(guān)的。
隔離性(isolation)。一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)并發(fā)的其他事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾。
持久性(durability)。持續(xù)性也稱(chēng)永久性(permanence),指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來(lái)的其他操作或故障不應(yīng)該對(duì)其有任何影響。
關(guān)于數(shù)據(jù)庫(kù)系統(tǒng)課程設(shè)計(jì)python的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級(jí)標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專(zhuān)注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶(hù)的一致認(rèn)可。
新聞標(biāo)題:Python在數(shù)據(jù)庫(kù)系統(tǒng)課程設(shè)計(jì)中的應(yīng)用(數(shù)據(jù)庫(kù)系統(tǒng)課程設(shè)計(jì)python)
文章分享:http://m.fisionsoft.com.cn/article/coesjcp.html


咨詢(xún)
建站咨詢(xún)
