




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第12章數(shù)據(jù)庫(kù)支持第12章數(shù)據(jù)庫(kù)支持內(nèi)容提綱12.1數(shù)據(jù)庫(kù)概述212.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)312.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作412.4SQLite數(shù)據(jù)庫(kù)與操作1內(nèi)容提綱12.1數(shù)據(jù)庫(kù)概述212.2Python數(shù)據(jù)庫(kù)引例引例如右表所示是聯(lián)想電腦某年在各地區(qū)的銷售情況。現(xiàn)在問(wèn)題是:(1)表中數(shù)據(jù)如何保持?(2)如何對(duì)多表中的數(shù)據(jù)進(jìn)行關(guān)聯(lián)操作?如求銷量前5的地區(qū)的平均成交均價(jià)?地區(qū)聯(lián)想電腦成交均價(jià)(元)廣州1233335655.00深圳945645700.00珠海856775645.00中山677775635.00佛山456465650.00北京967865800.00上海1200785810.00海南355555600.00成都234455648.00引例地區(qū)聯(lián)想電腦成交均價(jià)(元)廣州1233335655.0012.1數(shù)據(jù)庫(kù)概述數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)(Database)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的建立在計(jì)算機(jī)存儲(chǔ)設(shè)備上的倉(cāng)庫(kù),用戶可以對(duì)其中的數(shù)據(jù)進(jìn)行新增、查詢、更新、刪除等操作。數(shù)據(jù)庫(kù)管理系統(tǒng)典型關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)MicrosoftSQLServer,MySQL、Oracle、SQLite典型非關(guān)系數(shù)據(jù)庫(kù)Mongodb,Redis,Hbase12.1數(shù)據(jù)庫(kù)概述數(shù)據(jù)庫(kù)12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.2.1DB-API簡(jiǎn)介與統(tǒng)一操作模式DB-API簡(jiǎn)介DB-API是一個(gè)規(guī)范,它定義了一系列必須的對(duì)象和數(shù)據(jù)庫(kù)存取方式,可以為各種不同的數(shù)據(jù)庫(kù)管理系統(tǒng)的數(shù)據(jù)庫(kù)操作提供一致的訪問(wèn)接口。12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.212.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.2.1DB-API簡(jiǎn)介與統(tǒng)一操作模式PythonDB-API統(tǒng)一操作流程(1)導(dǎo)入DB-API模塊;(2)獲取與數(shù)據(jù)庫(kù)的連接;(3)執(zhí)行相關(guān)操作(SQL語(yǔ)句和存儲(chǔ)過(guò)程);(4)關(guān)閉與數(shù)據(jù)庫(kù)的連接。12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.212.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.2.2模塊接口(ModuleInterface)模塊方法與屬性Connect()為連接函數(shù);apilevel為字符串常量,表示該DB-API所兼容的DB-API最高版本號(hào),默認(rèn)為“1.0”;threadsafety為整型常量,表示該DB-API所支持的線程安全級(jí)別,其可能取值范圍0-3;paramstyle為字符串常量,表示該DP-API所期望的SQL參數(shù)風(fēng)格。類別名稱描述方法connect()連接函數(shù),同時(shí)也是Connection對(duì)象構(gòu)造函數(shù)全局屬性apilevelDB-API的版本號(hào)threadsafety線程安全級(jí)別paramstyle支持的SQL語(yǔ)句參數(shù)風(fēng)格12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.212.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.2.2模塊接口(ModuleInterface)connect()函數(shù)connect()是一個(gè)用來(lái)建立程序與數(shù)據(jù)庫(kù)連接的函數(shù),并返回一個(gè)Connection對(duì)象。具體參數(shù)如下表所列。一個(gè)連接案例:
connect(dsn='myhost:MYDB',user='guido',password='234$')參數(shù)名參數(shù)意義dsn數(shù)據(jù)源user用戶名password用戶密碼host數(shù)據(jù)庫(kù)所在主機(jī)database數(shù)據(jù)庫(kù)名稱12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.212.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.2.3Connection連接對(duì)象Connection連接對(duì)象搭建了應(yīng)用程序與數(shù)據(jù)庫(kù)之間的橋梁,完成將命令送往服務(wù)器,并從服務(wù)器接收數(shù)據(jù)等功能。該對(duì)象常用方法如下表:方法描述備注cursor()方法返回給定連接上建立的游標(biāo)對(duì)象(CursorObject)。如果數(shù)據(jù)庫(kù)沒(méi)有提供對(duì)應(yīng)的游標(biāo)對(duì)象,那么將由程序來(lái)模擬實(shí)現(xiàn)游標(biāo)功能。close()馬上關(guān)閉數(shù)據(jù)連接(而不是當(dāng)__del__方法被調(diào)用的時(shí)候),連接應(yīng)該此后變得不可用,再次訪問(wèn)本連接對(duì)象應(yīng)該觸發(fā)一個(gè)錯(cuò)誤(Error或其子類),同樣所有使用本連接對(duì)象的游標(biāo)(cursor)對(duì)象,也會(huì)導(dǎo)致例外發(fā)生。需要注意的是,在關(guān)閉連接對(duì)象之前,沒(méi)有首先提交對(duì)數(shù)據(jù)庫(kù)的改變
將會(huì)導(dǎo)致一個(gè)隱含的回滾動(dòng)作(rollback),這將丟棄之前的數(shù)據(jù)改變操作。commit()提交任何掛起的事務(wù)到數(shù)據(jù)庫(kù)中。需要注意的是,如果數(shù)據(jù)庫(kù)支持自動(dòng)提交(auto-commit),必須
在初始化時(shí)關(guān)閉。一般會(huì)有一個(gè)接口函數(shù)關(guān)閉此特性。rollback()此為可選方法,對(duì)于支持事務(wù)的數(shù)據(jù)庫(kù),調(diào)用此方法將導(dǎo)致數(shù)據(jù)庫(kù)回滾到事務(wù)開(kāi)始時(shí)的狀態(tài)。關(guān)閉數(shù)據(jù)庫(kù)連接之前沒(méi)有明確調(diào)用commit()提交
數(shù)據(jù)更新,將隱含導(dǎo)致rollback()被執(zhí)行。12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.2.4Cursor游標(biāo)對(duì)象游標(biāo)對(duì)象用來(lái)實(shí)現(xiàn)程序與數(shù)據(jù)庫(kù)的交互,一個(gè)游標(biāo)對(duì)象允許用戶執(zhí)行數(shù)據(jù)庫(kù)操作的相關(guān)命令以及獲取到查詢結(jié)果。該對(duì)象常用方法如下表:類別名稱描述屬性connection創(chuàng)建此游標(biāo)對(duì)象的數(shù)據(jù)庫(kù)連接arraysize使用fetchmany()方法一次取出多少條記錄,默認(rèn)為1lastrowid返回最后更新id(可選)rowcount最后一次execute()操作返回或影響的行數(shù)方法excute(sql[,args])執(zhí)行一個(gè)數(shù)據(jù)庫(kù)查詢或命令excutemany(sql,args):執(zhí)行多個(gè)數(shù)據(jù)庫(kù)查詢或命令fetchone()得到結(jié)果集的下一行fetchmany([size=cursor.arraysize])得到結(jié)果集的下幾行fetchall()得到結(jié)果集中剩下的所有行_iter_()創(chuàng)建一個(gè)迭代器對(duì)象next()使用迭代對(duì)象得到結(jié)果集的下一行close()關(guān)閉此游標(biāo)對(duì)象12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.212.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作概述MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),目前屬于
Oracle
旗下產(chǎn)品。MySQL支持UNIX、Linux、MacOS、Windows等多種操作系統(tǒng)。目前MySQL是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一。支持MySQL的PythonDB-API在Python2.x中使用最為廣泛的是mysqldb;在Python3.x中使用最為廣泛的是PyMySQL;MySQLConnector/Python是
MySQL官方提供的
Python3.x連接
MySQL數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序;12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作概述12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.1PyMySQL下載與安裝直接使用pip命令安裝$pipinstallPyMySQL安裝過(guò)程及成功界面如下圖所示。12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.1PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQL基本操作
數(shù)據(jù)庫(kù)連接操作PyMySQL主要是通過(guò)connect()來(lái)建立與數(shù)據(jù)庫(kù)的連接,案例代碼如下:>>>importpymysql>>>connection=pymysql.connect(host="localhost",user="python",passwd="123456",db="UserInfo",port=3306,)>>>print(connection.host_info)>>>connection.close()12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQL基本操作
創(chuàng)建數(shù)據(jù)庫(kù)表操作>>>importpymysql>>>connection=pymysql.Connect(host='localhost',port=3306,user='python',passwd='123456',db='UserInfo')>>>cursor=connection.cursor()>>>cursor.execute("DROPTABLEIFEXISTSUserList")>>>sql="""CREATETABLEUserList(
userIDCHAR(32)notNULL,
userNameCHAR(40)notNULL,
userPasswordCHAR(20),
userAgeINT
)""">>>cursor.execute(sql)>>>connection.close()12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQL基本操作新增、刪除、更新記錄操作Python異常處理機(jī)制try:
可能會(huì)發(fā)生異常語(yǔ)句塊exceptExceptionase:
第一種異常類型處理exceptExceptionase:
第二種異常類型處理except:
其他的異常類型處理else:
如果沒(méi)發(fā)生任何異常則執(zhí)行這里finally:
12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQL基本操作新增、刪除、更新記錄操作通過(guò)connection對(duì)象的cursor()方法獲取游標(biāo)cursor對(duì)象的各種方法實(shí)現(xiàn)數(shù)據(jù)庫(kù)記錄的新增、刪除與更新;新增記錄SQL語(yǔ)句"""INSERTINTOUserList(userID,userName,userPassword,userAge)VALUES('1','zheng','123',20)"""刪除記錄SQL語(yǔ)句updatesql="UPDATEUserListSETuserAge=userAge+1WHEREuserName='zheng'"更新記錄SQL語(yǔ)句deletesql="DELETEFROMUserListWHEREuserName='zheng'"
12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQ新增記錄示例:>>>importpymysql>>>connection=pymysql.Connect(host='localhost',port=3306,user='python',passwd='123456',
db='UserInfo')>>>cursor=connection.cursor()>>>insertsql="""INSERTINTOUserList(userID,userName,userPassword,userAge)VALUES('1','zheng','123',20)""">>>try:>>>
cursor.execute(insertsql)>>>
mit()>>>exceptExceptionase:>>>
connection.rollback()>>>print(e)>>>finally:>>>
connection.close()新增記錄示例:12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQL基本操作
查詢記錄操作相對(duì)于新增、修改和刪除而言,數(shù)據(jù)庫(kù)的查詢操作比較復(fù)雜,主要體現(xiàn)在對(duì)查詢結(jié)果的處理上,在實(shí)際使用過(guò)程中可以通過(guò)cursor的相關(guān)屬性和方法實(shí)現(xiàn)對(duì)結(jié)果集的獲取和處理。請(qǐng)參考下面示例程序;12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQ查詢記錄示例:importpymysqlconnection=pymysql.Connect(host='localhost',port=3306,user='root',passwd='',db='UserInfo')cursor=connection.cursor()selectsql="""SELECT*FROMUserList"""try:cursor.execute(selectsql)resultSet=cursor.fetchall()fordatainresultSet:userID=data[0]userName=data[1]userPassword=data[2]userAge=data[3]print(userID+""+userName+""+userPassword+""+str(userAge))exceptExceptionase:print(e)finally:connection.close()查詢記錄示例:12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite介紹與安裝SQLite介紹SQLite是一個(gè)軟件庫(kù),實(shí)現(xiàn)了自給自足的、無(wú)服務(wù)器的、零配置的、事務(wù)性的
SQL數(shù)據(jù)庫(kù)引擎,它的數(shù)據(jù)庫(kù)就是一個(gè)文件,SQLite直接訪問(wèn)其存儲(chǔ)文件。與關(guān)系數(shù)據(jù)庫(kù)進(jìn)行交互的標(biāo)準(zhǔn)
SQLite命令類似于
SQL,包括
CREATE、SELECT、INSERT、UPDATE、DELETE和
DROP,但是在
SQLite中,并不完整支持SQL92特性,比如ALTERTABLE命令,只是支持
RENAMETABLE和
ALTERTABLE的
ADDCOLUMNvariants命令,不支持
DROPCOLUMN、ALTERCOLUMN、ADDCONSTRAINT。12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite介紹與安裝SQLite安裝1、進(jìn)入到/download.html頁(yè)面下載sqlite-tools-win32-*.zip和sqlite-dll-win32-*.zip兩個(gè)壓縮文件。2、在某個(gè)系統(tǒng)盤(pán)創(chuàng)建相關(guān)文件夾,比如E:\SQLite,然后將以上兩個(gè)文件夾解壓縮得到E:\SQLite,如果sqlite-tools-win32-*.zip解壓縮后存在子文件夾,則將該子文件夾內(nèi)的文件復(fù)制到E:\SQLite,這樣在E:\SQLite將得到sqlite3.def、sqlite3.dll、sqlite3.exe、sqldiff.exe、sqlite3_analyzer.exe五個(gè)文件。3、將添加
E:\SQLite到PATH環(huán)境變量,最后在命令提示符下,使用sqlite3
命令,將顯示如下結(jié)果,表明SQLite安裝正確。12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite介紹與安裝SQLite基本操作
SQLite命令形式第一種是在cmd命令行中執(zhí)行的命令,比如sqlite3.exe命令;第二種是進(jìn)入sqlite環(huán)境后的“點(diǎn)命令”,比如.help,該種命令以“.”開(kāi)始,結(jié)尾沒(méi)有“;”;第三種是對(duì)數(shù)據(jù)進(jìn)行操作的命令,比如select,該種命令結(jié)尾必須以“;”結(jié)束。12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite介紹與安裝SQLite基本操作
SQLite命令:創(chuàng)建和打開(kāi)數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)庫(kù)命令:sqlite3數(shù)據(jù)庫(kù)名創(chuàng)建成功后會(huì)進(jìn)入到sqlite操作環(huán)境在該環(huán)境中,通過(guò)“.database”查看已有的數(shù)據(jù)庫(kù),通過(guò)“.quit”退出該環(huán)境再次輸入“sqlite3e:\sqlite\demo.db”則會(huì)進(jìn)入該已創(chuàng)建的數(shù)據(jù)庫(kù)中12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite介紹與安裝SQLite基本操作
SQLite命令:創(chuàng)建表SQLite使用CREATETABLE語(yǔ)句在任何給定的數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)新表,創(chuàng)建基本表需要涉及到命名表、定義列及每一列的數(shù)據(jù)類型?;菊Z(yǔ)法如下:CREATETABLEtable_name(column1datatypePRIMARYKEY(oneormorecolumns),column2datatype,);12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite介紹與安裝SQLite基本操作
SQLite命令:表基本操作新增、查詢、刪除、更新表數(shù)據(jù)記錄在SQLite環(huán)境中,表數(shù)據(jù)記錄的基本操作與其他關(guān)系數(shù)據(jù)庫(kù)的操作差別不大。新增數(shù)據(jù)記錄語(yǔ)句:INSERTINTOTABLE_NAME[(column1,column2,column3,...columnN)]VALUES(value1,value2,value3,...valueN);刪除數(shù)據(jù)記錄語(yǔ)句:DELETEFROMtable_nameWHERE[condition];更新表數(shù)據(jù)記錄語(yǔ)句:UPDATEtable_nameSETcolumn1=value1,column2=value2....,columnN=valueNWHERE[condition];查詢表數(shù)據(jù)記錄語(yǔ)句:SELECTcolumn1,column2,columnNFROMtable_namewhere[condition];12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.2SQLite-Python接口及操作當(dāng)采用Python操作SQLite時(shí)也需要一個(gè)面向SQLite的數(shù)據(jù)庫(kù)引擎的數(shù)據(jù)庫(kù)接口,pysqlite即為一個(gè)面向Python編程的DB-API接口,它讓一切對(duì)于SQLite的操作都變得異常簡(jiǎn)單。從Python2.5起,pysqlite成為Python的一個(gè)標(biāo)準(zhǔn)模塊,在使用時(shí),它被簡(jiǎn)稱為sqlite3模塊。12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.2SQLite12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.2SQLite-Python接口及操作Python中操作SQLite數(shù)據(jù)庫(kù)過(guò)程(1)用sqlite3.connect(“userdb”)創(chuàng)建數(shù)據(jù)庫(kù)連接,假設(shè)返回的連接對(duì)象為conn;(2)使用conn.cursor()方法創(chuàng)建游標(biāo)對(duì)象cursor;(3)基于cursor對(duì)象執(zhí)行各種操作。如果該數(shù)據(jù)庫(kù)操作不需要返回結(jié)果,就直接用cursor.execute(sql)執(zhí)行sql語(yǔ)句,根據(jù)數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別的不同,可能修改數(shù)據(jù)庫(kù)需要mit;如果需要返回查詢結(jié)果則用conn.cursor創(chuàng)建游標(biāo)對(duì)象cur,通過(guò)cursor.execute查詢數(shù)據(jù)庫(kù),用cur.fetchall/cur.fetchone/cur.fetchmany返回查詢結(jié)果;
(4)關(guān)閉cursor,conn對(duì)象。12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.2SQLite12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.2SQLite-Python接口及操作Python中操作SQLite數(shù)據(jù)庫(kù)示例請(qǐng)具體源碼請(qǐng)參考課本exam12-5.py12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.2SQLite12.5本章小結(jié)1.?dāng)?shù)據(jù)庫(kù):數(shù)據(jù)庫(kù)(Database)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的建立在計(jì)算機(jī)存儲(chǔ)設(shè)備上的倉(cāng)庫(kù),用戶可以對(duì)其中的數(shù)據(jù)進(jìn)行新增、查詢、更新、刪除等操作;2.DB-API:DB-API是一個(gè)規(guī)范,它定義了一些列必須的對(duì)象和數(shù)據(jù)庫(kù)存取方式,可以為各種不同的數(shù)據(jù)庫(kù)接口程序提供一致的訪問(wèn)接口,使得在不同的數(shù)據(jù)庫(kù)之間移植代碼成為一件輕松的事情。3.游標(biāo):游標(biāo)對(duì)象允許用戶執(zhí)行數(shù)據(jù)庫(kù)的相關(guān)命令以及獲取到查詢結(jié)果。常見(jiàn)的游標(biāo)的方法有execute(),fetchone(),fetchall()等。4.PyMySQL是一個(gè)支持python3.x操作MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)操作包,其基于DB-API規(guī)范,用戶通過(guò)該包可以方便操作MySQL數(shù)據(jù)庫(kù)。5.SQLite是一個(gè)軟件庫(kù),實(shí)現(xiàn)了自給自足的、無(wú)服務(wù)器的、零配置的、事務(wù)性的
SQL數(shù)據(jù)庫(kù)引擎,在小型或者嵌入式應(yīng)用系統(tǒng)上目前受到廣泛的使用。sqlite3提供了與
DB-API2.0規(guī)范兼容的
SQL接口,目前已經(jīng)集成在Python安裝包里面,用戶可以直接使用sqlite3包實(shí)現(xiàn)對(duì)SQLite數(shù)據(jù)庫(kù)的各種操作。12.5本章小結(jié)1.?dāng)?shù)據(jù)庫(kù):數(shù)據(jù)庫(kù)(Database第12章數(shù)據(jù)庫(kù)支持第12章數(shù)據(jù)庫(kù)支持內(nèi)容提綱12.1數(shù)據(jù)庫(kù)概述212.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)312.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作412.4SQLite數(shù)據(jù)庫(kù)與操作1內(nèi)容提綱12.1數(shù)據(jù)庫(kù)概述212.2Python數(shù)據(jù)庫(kù)引例引例如右表所示是聯(lián)想電腦某年在各地區(qū)的銷售情況?,F(xiàn)在問(wèn)題是:(1)表中數(shù)據(jù)如何保持?(2)如何對(duì)多表中的數(shù)據(jù)進(jìn)行關(guān)聯(lián)操作?如求銷量前5的地區(qū)的平均成交均價(jià)?地區(qū)聯(lián)想電腦成交均價(jià)(元)廣州1233335655.00深圳945645700.00珠海856775645.00中山677775635.00佛山456465650.00北京967865800.00上海1200785810.00海南355555600.00成都234455648.00引例地區(qū)聯(lián)想電腦成交均價(jià)(元)廣州1233335655.0012.1數(shù)據(jù)庫(kù)概述數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)(Database)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的建立在計(jì)算機(jī)存儲(chǔ)設(shè)備上的倉(cāng)庫(kù),用戶可以對(duì)其中的數(shù)據(jù)進(jìn)行新增、查詢、更新、刪除等操作。數(shù)據(jù)庫(kù)管理系統(tǒng)典型關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)MicrosoftSQLServer,MySQL、Oracle、SQLite典型非關(guān)系數(shù)據(jù)庫(kù)Mongodb,Redis,Hbase12.1數(shù)據(jù)庫(kù)概述數(shù)據(jù)庫(kù)12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.2.1DB-API簡(jiǎn)介與統(tǒng)一操作模式DB-API簡(jiǎn)介DB-API是一個(gè)規(guī)范,它定義了一系列必須的對(duì)象和數(shù)據(jù)庫(kù)存取方式,可以為各種不同的數(shù)據(jù)庫(kù)管理系統(tǒng)的數(shù)據(jù)庫(kù)操作提供一致的訪問(wèn)接口。12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.212.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.2.1DB-API簡(jiǎn)介與統(tǒng)一操作模式PythonDB-API統(tǒng)一操作流程(1)導(dǎo)入DB-API模塊;(2)獲取與數(shù)據(jù)庫(kù)的連接;(3)執(zhí)行相關(guān)操作(SQL語(yǔ)句和存儲(chǔ)過(guò)程);(4)關(guān)閉與數(shù)據(jù)庫(kù)的連接。12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.212.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.2.2模塊接口(ModuleInterface)模塊方法與屬性Connect()為連接函數(shù);apilevel為字符串常量,表示該DB-API所兼容的DB-API最高版本號(hào),默認(rèn)為“1.0”;threadsafety為整型常量,表示該DB-API所支持的線程安全級(jí)別,其可能取值范圍0-3;paramstyle為字符串常量,表示該DP-API所期望的SQL參數(shù)風(fēng)格。類別名稱描述方法connect()連接函數(shù),同時(shí)也是Connection對(duì)象構(gòu)造函數(shù)全局屬性apilevelDB-API的版本號(hào)threadsafety線程安全級(jí)別paramstyle支持的SQL語(yǔ)句參數(shù)風(fēng)格12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.212.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.2.2模塊接口(ModuleInterface)connect()函數(shù)connect()是一個(gè)用來(lái)建立程序與數(shù)據(jù)庫(kù)連接的函數(shù),并返回一個(gè)Connection對(duì)象。具體參數(shù)如下表所列。一個(gè)連接案例:
connect(dsn='myhost:MYDB',user='guido',password='234$')參數(shù)名參數(shù)意義dsn數(shù)據(jù)源user用戶名password用戶密碼host數(shù)據(jù)庫(kù)所在主機(jī)database數(shù)據(jù)庫(kù)名稱12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.212.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.2.3Connection連接對(duì)象Connection連接對(duì)象搭建了應(yīng)用程序與數(shù)據(jù)庫(kù)之間的橋梁,完成將命令送往服務(wù)器,并從服務(wù)器接收數(shù)據(jù)等功能。該對(duì)象常用方法如下表:方法描述備注cursor()方法返回給定連接上建立的游標(biāo)對(duì)象(CursorObject)。如果數(shù)據(jù)庫(kù)沒(méi)有提供對(duì)應(yīng)的游標(biāo)對(duì)象,那么將由程序來(lái)模擬實(shí)現(xiàn)游標(biāo)功能。close()馬上關(guān)閉數(shù)據(jù)連接(而不是當(dāng)__del__方法被調(diào)用的時(shí)候),連接應(yīng)該此后變得不可用,再次訪問(wèn)本連接對(duì)象應(yīng)該觸發(fā)一個(gè)錯(cuò)誤(Error或其子類),同樣所有使用本連接對(duì)象的游標(biāo)(cursor)對(duì)象,也會(huì)導(dǎo)致例外發(fā)生。需要注意的是,在關(guān)閉連接對(duì)象之前,沒(méi)有首先提交對(duì)數(shù)據(jù)庫(kù)的改變
將會(huì)導(dǎo)致一個(gè)隱含的回滾動(dòng)作(rollback),這將丟棄之前的數(shù)據(jù)改變操作。commit()提交任何掛起的事務(wù)到數(shù)據(jù)庫(kù)中。需要注意的是,如果數(shù)據(jù)庫(kù)支持自動(dòng)提交(auto-commit),必須
在初始化時(shí)關(guān)閉。一般會(huì)有一個(gè)接口函數(shù)關(guān)閉此特性。rollback()此為可選方法,對(duì)于支持事務(wù)的數(shù)據(jù)庫(kù),調(diào)用此方法將導(dǎo)致數(shù)據(jù)庫(kù)回滾到事務(wù)開(kāi)始時(shí)的狀態(tài)。關(guān)閉數(shù)據(jù)庫(kù)連接之前沒(méi)有明確調(diào)用commit()提交
數(shù)據(jù)更新,將隱含導(dǎo)致rollback()被執(zhí)行。12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.2.4Cursor游標(biāo)對(duì)象游標(biāo)對(duì)象用來(lái)實(shí)現(xiàn)程序與數(shù)據(jù)庫(kù)的交互,一個(gè)游標(biāo)對(duì)象允許用戶執(zhí)行數(shù)據(jù)庫(kù)操作的相關(guān)命令以及獲取到查詢結(jié)果。該對(duì)象常用方法如下表:類別名稱描述屬性connection創(chuàng)建此游標(biāo)對(duì)象的數(shù)據(jù)庫(kù)連接arraysize使用fetchmany()方法一次取出多少條記錄,默認(rèn)為1lastrowid返回最后更新id(可選)rowcount最后一次execute()操作返回或影響的行數(shù)方法excute(sql[,args])執(zhí)行一個(gè)數(shù)據(jù)庫(kù)查詢或命令excutemany(sql,args):執(zhí)行多個(gè)數(shù)據(jù)庫(kù)查詢或命令fetchone()得到結(jié)果集的下一行fetchmany([size=cursor.arraysize])得到結(jié)果集的下幾行fetchall()得到結(jié)果集中剩下的所有行_iter_()創(chuàng)建一個(gè)迭代器對(duì)象next()使用迭代對(duì)象得到結(jié)果集的下一行close()關(guān)閉此游標(biāo)對(duì)象12.2Python數(shù)據(jù)庫(kù)編程接口(DB-API)12.212.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作概述MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),目前屬于
Oracle
旗下產(chǎn)品。MySQL支持UNIX、Linux、MacOS、Windows等多種操作系統(tǒng)。目前MySQL是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一。支持MySQL的PythonDB-API在Python2.x中使用最為廣泛的是mysqldb;在Python3.x中使用最為廣泛的是PyMySQL;MySQLConnector/Python是
MySQL官方提供的
Python3.x連接
MySQL數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序;12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作概述12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.1PyMySQL下載與安裝直接使用pip命令安裝$pipinstallPyMySQL安裝過(guò)程及成功界面如下圖所示。12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.1PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQL基本操作
數(shù)據(jù)庫(kù)連接操作PyMySQL主要是通過(guò)connect()來(lái)建立與數(shù)據(jù)庫(kù)的連接,案例代碼如下:>>>importpymysql>>>connection=pymysql.connect(host="localhost",user="python",passwd="123456",db="UserInfo",port=3306,)>>>print(connection.host_info)>>>connection.close()12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQL基本操作
創(chuàng)建數(shù)據(jù)庫(kù)表操作>>>importpymysql>>>connection=pymysql.Connect(host='localhost',port=3306,user='python',passwd='123456',db='UserInfo')>>>cursor=connection.cursor()>>>cursor.execute("DROPTABLEIFEXISTSUserList")>>>sql="""CREATETABLEUserList(
userIDCHAR(32)notNULL,
userNameCHAR(40)notNULL,
userPasswordCHAR(20),
userAgeINT
)""">>>cursor.execute(sql)>>>connection.close()12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQL基本操作新增、刪除、更新記錄操作Python異常處理機(jī)制try:
可能會(huì)發(fā)生異常語(yǔ)句塊exceptExceptionase:
第一種異常類型處理exceptExceptionase:
第二種異常類型處理except:
其他的異常類型處理else:
如果沒(méi)發(fā)生任何異常則執(zhí)行這里finally:
12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQL基本操作新增、刪除、更新記錄操作通過(guò)connection對(duì)象的cursor()方法獲取游標(biāo)cursor對(duì)象的各種方法實(shí)現(xiàn)數(shù)據(jù)庫(kù)記錄的新增、刪除與更新;新增記錄SQL語(yǔ)句"""INSERTINTOUserList(userID,userName,userPassword,userAge)VALUES('1','zheng','123',20)"""刪除記錄SQL語(yǔ)句updatesql="UPDATEUserListSETuserAge=userAge+1WHEREuserName='zheng'"更新記錄SQL語(yǔ)句deletesql="DELETEFROMUserListWHEREuserName='zheng'"
12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQ新增記錄示例:>>>importpymysql>>>connection=pymysql.Connect(host='localhost',port=3306,user='python',passwd='123456',
db='UserInfo')>>>cursor=connection.cursor()>>>insertsql="""INSERTINTOUserList(userID,userName,userPassword,userAge)VALUES('1','zheng','123',20)""">>>try:>>>
cursor.execute(insertsql)>>>
mit()>>>exceptExceptionase:>>>
connection.rollback()>>>print(e)>>>finally:>>>
connection.close()新增記錄示例:12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQL基本操作
查詢記錄操作相對(duì)于新增、修改和刪除而言,數(shù)據(jù)庫(kù)的查詢操作比較復(fù)雜,主要體現(xiàn)在對(duì)查詢結(jié)果的處理上,在實(shí)際使用過(guò)程中可以通過(guò)cursor的相關(guān)屬性和方法實(shí)現(xiàn)對(duì)結(jié)果集的獲取和處理。請(qǐng)參考下面示例程序;12.3MySQL關(guān)系數(shù)據(jù)庫(kù)操作12.3.2PyMySQ查詢記錄示例:importpymysqlconnection=pymysql.Connect(host='localhost',port=3306,user='root',passwd='',db='UserInfo')cursor=connection.cursor()selectsql="""SELECT*FROMUserList"""try:cursor.execute(selectsql)resultSet=cursor.fetchall()fordatainresultSet:userID=data[0]userName=data[1]userPassword=data[2]userAge=data[3]print(userID+""+userName+""+userPassword+""+str(userAge))exceptExceptionase:print(e)finally:connection.close()查詢記錄示例:12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite介紹與安裝SQLite介紹SQLite是一個(gè)軟件庫(kù),實(shí)現(xiàn)了自給自足的、無(wú)服務(wù)器的、零配置的、事務(wù)性的
SQL數(shù)據(jù)庫(kù)引擎,它的數(shù)據(jù)庫(kù)就是一個(gè)文件,SQLite直接訪問(wèn)其存儲(chǔ)文件。與關(guān)系數(shù)據(jù)庫(kù)進(jìn)行交互的標(biāo)準(zhǔn)
SQLite命令類似于
SQL,包括
CREATE、SELECT、INSERT、UPDATE、DELETE和
DROP,但是在
SQLite中,并不完整支持SQL92特性,比如ALTERTABLE命令,只是支持
RENAMETABLE和
ALTERTABLE的
ADDCOLUMNvariants命令,不支持
DROPCOLUMN、ALTERCOLUMN、ADDCONSTRAINT。12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite介紹與安裝SQLite安裝1、進(jìn)入到/download.html頁(yè)面下載sqlite-tools-win32-*.zip和sqlite-dll-win32-*.zip兩個(gè)壓縮文件。2、在某個(gè)系統(tǒng)盤(pán)創(chuàng)建相關(guān)文件夾,比如E:\SQLite,然后將以上兩個(gè)文件夾解壓縮得到E:\SQLite,如果sqlite-tools-win32-*.zip解壓縮后存在子文件夾,則將該子文件夾內(nèi)的文件復(fù)制到E:\SQLite,這樣在E:\SQLite將得到sqlite3.def、sqlite3.dll、sqlite3.exe、sqldiff.exe、sqlite3_analyzer.exe五個(gè)文件。3、將添加
E:\SQLite到PATH環(huán)境變量,最后在命令提示符下,使用sqlite3
命令,將顯示如下結(jié)果,表明SQLite安裝正確。12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite介紹與安裝SQLite基本操作
SQLite命令形式第一種是在cmd命令行中執(zhí)行的命令,比如sqlite3.exe命令;第二種是進(jìn)入sqlite環(huán)境后的“點(diǎn)命令”,比如.help,該種命令以“.”開(kāi)始,結(jié)尾沒(méi)有“;”;第三種是對(duì)數(shù)據(jù)進(jìn)行操作的命令,比如select,該種命令結(jié)尾必須以“;”結(jié)束。12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite介紹與安裝SQLite基本操作
SQLite命令:創(chuàng)建和打開(kāi)數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)庫(kù)命令:sqlite3數(shù)據(jù)庫(kù)名創(chuàng)建成功后會(huì)進(jìn)入到sqlite操作環(huán)境在該環(huán)境中,通過(guò)“.database”查看已有的數(shù)據(jù)庫(kù),通過(guò)“.quit”退出該環(huán)境再次輸入“sqlite3e:\sqlite\demo.db”則會(huì)進(jìn)入該已創(chuàng)建的數(shù)據(jù)庫(kù)中12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite介紹與安裝SQLite基本操作
SQLite命令:創(chuàng)建表SQLite使用CREATETABLE語(yǔ)句在任何給定的數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)新表,創(chuàng)建基本表需要涉及到命名表、定義列及每一列的數(shù)據(jù)類型。基本語(yǔ)法如下:CREATETABLEtable_name(column1datatypePRIMARYKEY(oneormorecolumns),column2datatype,);12.4SQLite數(shù)據(jù)庫(kù)與操作12.4.1SQLite12.4SQLit
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 水庫(kù)設(shè)計(jì)合同范本
- 汽車氣囊采購(gòu)合同范本
- 各種工程材料合同范本
- 合作傭金協(xié)議合同范例
- 吊籃租賃安全合同范本
- 勞務(wù)兼職合同范本
- 合同藥品采購(gòu)合同范本
- 制作相框合同范本
- 影視演員聘用合同范本
- 供貨商供貨合同范本
- 欄桿拆除及更換施工方案
- 10我們愛(ài)和平(第1課時(shí))(說(shuō)課稿)2023-2024學(xué)年統(tǒng)編版道德與法治六年級(jí)下冊(cè)
- 《國(guó)際貿(mào)易實(shí)務(wù)(英文版)》(英文課件) -Ch 6 International Cargo Transport-Ch 11 Cross-border Commerce
- 新條令.新亮點(diǎn)-內(nèi)務(wù)條令解讀
- 中醫(yī)適宜技術(shù)-中藥熱奄包
- 林海雪原課件6張
- 銀發(fā)經(jīng)濟(jì)產(chǎn)業(yè)發(fā)展規(guī)劃
- 防火涂料質(zhì)量保證書(shū)
- 礦產(chǎn)資源開(kāi)發(fā)合同備忘錄范本
- 大模型在刑偵技術(shù)中的應(yīng)用探索
- 肝硬化課件(共45張)
評(píng)論
0/150
提交評(píng)論