Python程序設(shè)計基礎(chǔ)-Chap12-數(shù)據(jù)庫支持課件_第1頁
Python程序設(shè)計基礎(chǔ)-Chap12-數(shù)據(jù)庫支持課件_第2頁
Python程序設(shè)計基礎(chǔ)-Chap12-數(shù)據(jù)庫支持課件_第3頁
Python程序設(shè)計基礎(chǔ)-Chap12-數(shù)據(jù)庫支持課件_第4頁
Python程序設(shè)計基礎(chǔ)-Chap12-數(shù)據(jù)庫支持課件_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第12章數(shù)據(jù)庫支持第12章數(shù)據(jù)庫支持內(nèi)容提綱12.1數(shù)據(jù)庫概述212.2Python數(shù)據(jù)庫編程接口(DB-API)312.3MySQL關(guān)系數(shù)據(jù)庫操作412.4SQLite數(shù)據(jù)庫與操作1內(nèi)容提綱12.1數(shù)據(jù)庫概述212.2Python數(shù)據(jù)庫引例引例如右表所示是聯(lián)想電腦某年在各地區(qū)的銷售情況。現(xiàn)在問題是:(1)表中數(shù)據(jù)如何保持?(2)如何對多表中的數(shù)據(jù)進(jìn)行關(guān)聯(lián)操作?如求銷量前5的地區(qū)的平均成交均價?地區(qū)聯(lián)想電腦成交均價(元)廣州1233335655.00深圳945645700.00珠海856775645.00中山677775635.00佛山456465650.00北京967865800.00上海1200785810.00海南355555600.00成都234455648.00引例地區(qū)聯(lián)想電腦成交均價(元)廣州1233335655.0012.1數(shù)據(jù)庫概述數(shù)據(jù)庫數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的建立在計算機存儲設(shè)備上的倉庫,用戶可以對其中的數(shù)據(jù)進(jìn)行新增、查詢、更新、刪除等操作。數(shù)據(jù)庫管理系統(tǒng)典型關(guān)系數(shù)據(jù)庫管理系統(tǒng)MicrosoftSQLServer,MySQL、Oracle、SQLite典型非關(guān)系數(shù)據(jù)庫Mongodb,Redis,Hbase12.1數(shù)據(jù)庫概述數(shù)據(jù)庫12.2Python數(shù)據(jù)庫編程接口(DB-API)12.2.1DB-API簡介與統(tǒng)一操作模式DB-API簡介DB-API是一個規(guī)范,它定義了一系列必須的對象和數(shù)據(jù)庫存取方式,可以為各種不同的數(shù)據(jù)庫管理系統(tǒng)的數(shù)據(jù)庫操作提供一致的訪問接口。12.2Python數(shù)據(jù)庫編程接口(DB-API)12.212.2Python數(shù)據(jù)庫編程接口(DB-API)12.2.1DB-API簡介與統(tǒng)一操作模式PythonDB-API統(tǒng)一操作流程(1)導(dǎo)入DB-API模塊;(2)獲取與數(shù)據(jù)庫的連接;(3)執(zhí)行相關(guān)操作(SQL語句和存儲過程);(4)關(guān)閉與數(shù)據(jù)庫的連接。12.2Python數(shù)據(jù)庫編程接口(DB-API)12.212.2Python數(shù)據(jù)庫編程接口(DB-API)12.2.2模塊接口(ModuleInterface)模塊方法與屬性Connect()為連接函數(shù);apilevel為字符串常量,表示該DB-API所兼容的DB-API最高版本號,默認(rèn)為“1.0”;threadsafety為整型常量,表示該DB-API所支持的線程安全級別,其可能取值范圍0-3;paramstyle為字符串常量,表示該DP-API所期望的SQL參數(shù)風(fēng)格。類別名稱描述方法connect()連接函數(shù),同時也是Connection對象構(gòu)造函數(shù)全局屬性apilevelDB-API的版本號threadsafety線程安全級別paramstyle支持的SQL語句參數(shù)風(fēng)格12.2Python數(shù)據(jù)庫編程接口(DB-API)12.212.2Python數(shù)據(jù)庫編程接口(DB-API)12.2.2模塊接口(ModuleInterface)connect()函數(shù)connect()是一個用來建立程序與數(shù)據(jù)庫連接的函數(shù),并返回一個Connection對象。具體參數(shù)如下表所列。一個連接案例:

connect(dsn='myhost:MYDB',user='guido',password='234$')參數(shù)名參數(shù)意義dsn數(shù)據(jù)源user用戶名password用戶密碼host數(shù)據(jù)庫所在主機database數(shù)據(jù)庫名稱12.2Python數(shù)據(jù)庫編程接口(DB-API)12.212.2Python數(shù)據(jù)庫編程接口(DB-API)12.2.3Connection連接對象Connection連接對象搭建了應(yīng)用程序與數(shù)據(jù)庫之間的橋梁,完成將命令送往服務(wù)器,并從服務(wù)器接收數(shù)據(jù)等功能。該對象常用方法如下表:方法描述備注cursor()方法返回給定連接上建立的游標(biāo)對象(CursorObject)。如果數(shù)據(jù)庫沒有提供對應(yīng)的游標(biāo)對象,那么將由程序來模擬實現(xiàn)游標(biāo)功能。close()馬上關(guān)閉數(shù)據(jù)連接(而不是當(dāng)__del__方法被調(diào)用的時候),連接應(yīng)該此后變得不可用,再次訪問本連接對象應(yīng)該觸發(fā)一個錯誤(Error或其子類),同樣所有使用本連接對象的游標(biāo)(cursor)對象,也會導(dǎo)致例外發(fā)生。需要注意的是,在關(guān)閉連接對象之前,沒有首先提交對數(shù)據(jù)庫的改變

將會導(dǎo)致一個隱含的回滾動作(rollback),這將丟棄之前的數(shù)據(jù)改變操作。commit()提交任何掛起的事務(wù)到數(shù)據(jù)庫中。需要注意的是,如果數(shù)據(jù)庫支持自動提交(auto-commit),必須

在初始化時關(guān)閉。一般會有一個接口函數(shù)關(guān)閉此特性。rollback()此為可選方法,對于支持事務(wù)的數(shù)據(jù)庫,調(diào)用此方法將導(dǎo)致數(shù)據(jù)庫回滾到事務(wù)開始時的狀態(tài)。關(guān)閉數(shù)據(jù)庫連接之前沒有明確調(diào)用commit()提交

數(shù)據(jù)更新,將隱含導(dǎo)致rollback()被執(zhí)行。12.2Python數(shù)據(jù)庫編程接口(DB-API)12.12.2Python數(shù)據(jù)庫編程接口(DB-API)12.2.4Cursor游標(biāo)對象游標(biāo)對象用來實現(xiàn)程序與數(shù)據(jù)庫的交互,一個游標(biāo)對象允許用戶執(zhí)行數(shù)據(jù)庫操作的相關(guān)命令以及獲取到查詢結(jié)果。該對象常用方法如下表:類別名稱描述屬性connection創(chuàng)建此游標(biāo)對象的數(shù)據(jù)庫連接arraysize使用fetchmany()方法一次取出多少條記錄,默認(rèn)為1lastrowid返回最后更新id(可選)rowcount最后一次execute()操作返回或影響的行數(shù)方法excute(sql[,args])執(zhí)行一個數(shù)據(jù)庫查詢或命令excutemany(sql,args):執(zhí)行多個數(shù)據(jù)庫查詢或命令fetchone()得到結(jié)果集的下一行fetchmany([size=cursor.arraysize])得到結(jié)果集的下幾行fetchall()得到結(jié)果集中剩下的所有行_iter_()創(chuàng)建一個迭代器對象next()使用迭代對象得到結(jié)果集的下一行close()關(guān)閉此游標(biāo)對象12.2Python數(shù)據(jù)庫編程接口(DB-API)12.212.3MySQL關(guān)系數(shù)據(jù)庫操作概述MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),目前屬于

Oracle

旗下產(chǎn)品。MySQL支持UNIX、Linux、MacOS、Windows等多種操作系統(tǒng)。目前MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一。支持MySQL的PythonDB-API在Python2.x中使用最為廣泛的是mysqldb;在Python3.x中使用最為廣泛的是PyMySQL;MySQLConnector/Python是

MySQL官方提供的

Python3.x連接

MySQL數(shù)據(jù)庫的驅(qū)動程序;12.3MySQL關(guān)系數(shù)據(jù)庫操作概述12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.1PyMySQL下載與安裝直接使用pip命令安裝$pipinstallPyMySQL安裝過程及成功界面如下圖所示。12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.1PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.2PyMySQL基本操作

數(shù)據(jù)庫連接操作PyMySQL主要是通過connect()來建立與數(shù)據(jù)庫的連接,案例代碼如下:>>>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ù)庫操作12.3.2PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.2PyMySQL基本操作

創(chuàng)建數(shù)據(jù)庫表操作>>>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ù)庫操作12.3.2PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.2PyMySQL基本操作新增、刪除、更新記錄操作Python異常處理機制try:

可能會發(fā)生異常語句塊exceptExceptionase:

第一種異常類型處理exceptExceptionase:

第二種異常類型處理except:

其他的異常類型處理else:

如果沒發(fā)生任何異常則執(zhí)行這里finally:

12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.2PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.2PyMySQL基本操作新增、刪除、更新記錄操作通過connection對象的cursor()方法獲取游標(biāo)cursor對象的各種方法實現(xiàn)數(shù)據(jù)庫記錄的新增、刪除與更新;新增記錄SQL語句"""INSERTINTOUserList(userID,userName,userPassword,userAge)VALUES('1','zheng','123',20)"""刪除記錄SQL語句updatesql="UPDATEUserListSETuserAge=userAge+1WHEREuserName='zheng'"更新記錄SQL語句deletesql="DELETEFROMUserListWHEREuserName='zheng'"

12.3MySQL關(guān)系數(shù)據(jù)庫操作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ù)庫操作12.3.2PyMySQL基本操作

查詢記錄操作相對于新增、修改和刪除而言,數(shù)據(jù)庫的查詢操作比較復(fù)雜,主要體現(xiàn)在對查詢結(jié)果的處理上,在實際使用過程中可以通過cursor的相關(guān)屬性和方法實現(xiàn)對結(jié)果集的獲取和處理。請參考下面示例程序;12.3MySQL關(guān)系數(shù)據(jù)庫操作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ù)庫與操作12.4.1SQLite介紹與安裝SQLite介紹SQLite是一個軟件庫,實現(xiàn)了自給自足的、無服務(wù)器的、零配置的、事務(wù)性的

SQL數(shù)據(jù)庫引擎,它的數(shù)據(jù)庫就是一個文件,SQLite直接訪問其存儲文件。與關(guān)系數(shù)據(jù)庫進(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ù)庫與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite介紹與安裝SQLite安裝1、進(jìn)入到/download.html頁面下載sqlite-tools-win32-*.zip和sqlite-dll-win32-*.zip兩個壓縮文件。2、在某個系統(tǒng)盤創(chuàng)建相關(guān)文件夾,比如E:\SQLite,然后將以上兩個文件夾解壓縮得到E:\SQLite,如果sqlite-tools-win32-*.zip解壓縮后存在子文件夾,則將該子文件夾內(nèi)的文件復(fù)制到E:\SQLite,這樣在E:\SQLite將得到sqlite3.def、sqlite3.dll、sqlite3.exe、sqldiff.exe、sqlite3_analyzer.exe五個文件。3、將添加

E:\SQLite到PATH環(huán)境變量,最后在命令提示符下,使用sqlite3

命令,將顯示如下結(jié)果,表明SQLite安裝正確。12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite介紹與安裝SQLite基本操作

SQLite命令形式第一種是在cmd命令行中執(zhí)行的命令,比如sqlite3.exe命令;第二種是進(jìn)入sqlite環(huán)境后的“點命令”,比如.help,該種命令以“.”開始,結(jié)尾沒有“;”;第三種是對數(shù)據(jù)進(jìn)行操作的命令,比如select,該種命令結(jié)尾必須以“;”結(jié)束。12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite介紹與安裝SQLite基本操作

SQLite命令:創(chuàng)建和打開數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫命令:sqlite3數(shù)據(jù)庫名創(chuàng)建成功后會進(jìn)入到sqlite操作環(huán)境在該環(huán)境中,通過“.database”查看已有的數(shù)據(jù)庫,通過“.quit”退出該環(huán)境再次輸入“sqlite3e:\sqlite\demo.db”則會進(jìn)入該已創(chuàng)建的數(shù)據(jù)庫中12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite介紹與安裝SQLite基本操作

SQLite命令:創(chuàng)建表SQLite使用CREATETABLE語句在任何給定的數(shù)據(jù)庫創(chuàng)建一個新表,創(chuàng)建基本表需要涉及到命名表、定義列及每一列的數(shù)據(jù)類型?;菊Z法如下:CREATETABLEtable_name(column1datatypePRIMARYKEY(oneormorecolumns),column2datatype,);12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite介紹與安裝SQLite基本操作

SQLite命令:表基本操作新增、查詢、刪除、更新表數(shù)據(jù)記錄在SQLite環(huán)境中,表數(shù)據(jù)記錄的基本操作與其他關(guān)系數(shù)據(jù)庫的操作差別不大。新增數(shù)據(jù)記錄語句:INSERTINTOTABLE_NAME[(column1,column2,column3,...columnN)]VALUES(value1,value2,value3,...valueN);刪除數(shù)據(jù)記錄語句:DELETEFROMtable_nameWHERE[condition];更新表數(shù)據(jù)記錄語句:UPDATEtable_nameSETcolumn1=value1,column2=value2....,columnN=valueNWHERE[condition];查詢表數(shù)據(jù)記錄語句:SELECTcolumn1,column2,columnNFROMtable_namewhere[condition];12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫與操作12.4.2SQLite-Python接口及操作當(dāng)采用Python操作SQLite時也需要一個面向SQLite的數(shù)據(jù)庫引擎的數(shù)據(jù)庫接口,pysqlite即為一個面向Python編程的DB-API接口,它讓一切對于SQLite的操作都變得異常簡單。從Python2.5起,pysqlite成為Python的一個標(biāo)準(zhǔn)模塊,在使用時,它被簡稱為sqlite3模塊。12.4SQLite數(shù)據(jù)庫與操作12.4.2SQLite12.4SQLite數(shù)據(jù)庫與操作12.4.2SQLite-Python接口及操作Python中操作SQLite數(shù)據(jù)庫過程(1)用sqlite3.connect(“userdb”)創(chuàng)建數(shù)據(jù)庫連接,假設(shè)返回的連接對象為conn;(2)使用conn.cursor()方法創(chuàng)建游標(biāo)對象cursor;(3)基于cursor對象執(zhí)行各種操作。如果該數(shù)據(jù)庫操作不需要返回結(jié)果,就直接用cursor.execute(sql)執(zhí)行sql語句,根據(jù)數(shù)據(jù)庫事務(wù)隔離級別的不同,可能修改數(shù)據(jù)庫需要mit;如果需要返回查詢結(jié)果則用conn.cursor創(chuàng)建游標(biāo)對象cur,通過cursor.execute查詢數(shù)據(jù)庫,用cur.fetchall/cur.fetchone/cur.fetchmany返回查詢結(jié)果;

(4)關(guān)閉cursor,conn對象。12.4SQLite數(shù)據(jù)庫與操作12.4.2SQLite12.4SQLite數(shù)據(jù)庫與操作12.4.2SQLite-Python接口及操作Python中操作SQLite數(shù)據(jù)庫示例請具體源碼請參考課本exam12-5.py12.4SQLite數(shù)據(jù)庫與操作12.4.2SQLite12.5本章小結(jié)1.?dāng)?shù)據(jù)庫:數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的建立在計算機存儲設(shè)備上的倉庫,用戶可以對其中的數(shù)據(jù)進(jìn)行新增、查詢、更新、刪除等操作;2.DB-API:DB-API是一個規(guī)范,它定義了一些列必須的對象和數(shù)據(jù)庫存取方式,可以為各種不同的數(shù)據(jù)庫接口程序提供一致的訪問接口,使得在不同的數(shù)據(jù)庫之間移植代碼成為一件輕松的事情。3.游標(biāo):游標(biāo)對象允許用戶執(zhí)行數(shù)據(jù)庫的相關(guān)命令以及獲取到查詢結(jié)果。常見的游標(biāo)的方法有execute(),fetchone(),fetchall()等。4.PyMySQL是一個支持python3.x操作MySQL數(shù)據(jù)庫的數(shù)據(jù)庫操作包,其基于DB-API規(guī)范,用戶通過該包可以方便操作MySQL數(shù)據(jù)庫。5.SQLite是一個軟件庫,實現(xiàn)了自給自足的、無服務(wù)器的、零配置的、事務(wù)性的

SQL數(shù)據(jù)庫引擎,在小型或者嵌入式應(yīng)用系統(tǒng)上目前受到廣泛的使用。sqlite3提供了與

DB-API2.0規(guī)范兼容的

SQL接口,目前已經(jīng)集成在Python安裝包里面,用戶可以直接使用sqlite3包實現(xiàn)對SQLite數(shù)據(jù)庫的各種操作。12.5本章小結(jié)1.?dāng)?shù)據(jù)庫:數(shù)據(jù)庫(Database第12章數(shù)據(jù)庫支持第12章數(shù)據(jù)庫支持內(nèi)容提綱12.1數(shù)據(jù)庫概述212.2Python數(shù)據(jù)庫編程接口(DB-API)312.3MySQL關(guān)系數(shù)據(jù)庫操作412.4SQLite數(shù)據(jù)庫與操作1內(nèi)容提綱12.1數(shù)據(jù)庫概述212.2Python數(shù)據(jù)庫引例引例如右表所示是聯(lián)想電腦某年在各地區(qū)的銷售情況。現(xiàn)在問題是:(1)表中數(shù)據(jù)如何保持?(2)如何對多表中的數(shù)據(jù)進(jìn)行關(guān)聯(lián)操作?如求銷量前5的地區(qū)的平均成交均價?地區(qū)聯(lián)想電腦成交均價(元)廣州1233335655.00深圳945645700.00珠海856775645.00中山677775635.00佛山456465650.00北京967865800.00上海1200785810.00海南355555600.00成都234455648.00引例地區(qū)聯(lián)想電腦成交均價(元)廣州1233335655.0012.1數(shù)據(jù)庫概述數(shù)據(jù)庫數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的建立在計算機存儲設(shè)備上的倉庫,用戶可以對其中的數(shù)據(jù)進(jìn)行新增、查詢、更新、刪除等操作。數(shù)據(jù)庫管理系統(tǒng)典型關(guān)系數(shù)據(jù)庫管理系統(tǒng)MicrosoftSQLServer,MySQL、Oracle、SQLite典型非關(guān)系數(shù)據(jù)庫Mongodb,Redis,Hbase12.1數(shù)據(jù)庫概述數(shù)據(jù)庫12.2Python數(shù)據(jù)庫編程接口(DB-API)12.2.1DB-API簡介與統(tǒng)一操作模式DB-API簡介DB-API是一個規(guī)范,它定義了一系列必須的對象和數(shù)據(jù)庫存取方式,可以為各種不同的數(shù)據(jù)庫管理系統(tǒng)的數(shù)據(jù)庫操作提供一致的訪問接口。12.2Python數(shù)據(jù)庫編程接口(DB-API)12.212.2Python數(shù)據(jù)庫編程接口(DB-API)12.2.1DB-API簡介與統(tǒng)一操作模式PythonDB-API統(tǒng)一操作流程(1)導(dǎo)入DB-API模塊;(2)獲取與數(shù)據(jù)庫的連接;(3)執(zhí)行相關(guān)操作(SQL語句和存儲過程);(4)關(guān)閉與數(shù)據(jù)庫的連接。12.2Python數(shù)據(jù)庫編程接口(DB-API)12.212.2Python數(shù)據(jù)庫編程接口(DB-API)12.2.2模塊接口(ModuleInterface)模塊方法與屬性Connect()為連接函數(shù);apilevel為字符串常量,表示該DB-API所兼容的DB-API最高版本號,默認(rèn)為“1.0”;threadsafety為整型常量,表示該DB-API所支持的線程安全級別,其可能取值范圍0-3;paramstyle為字符串常量,表示該DP-API所期望的SQL參數(shù)風(fēng)格。類別名稱描述方法connect()連接函數(shù),同時也是Connection對象構(gòu)造函數(shù)全局屬性apilevelDB-API的版本號threadsafety線程安全級別paramstyle支持的SQL語句參數(shù)風(fēng)格12.2Python數(shù)據(jù)庫編程接口(DB-API)12.212.2Python數(shù)據(jù)庫編程接口(DB-API)12.2.2模塊接口(ModuleInterface)connect()函數(shù)connect()是一個用來建立程序與數(shù)據(jù)庫連接的函數(shù),并返回一個Connection對象。具體參數(shù)如下表所列。一個連接案例:

connect(dsn='myhost:MYDB',user='guido',password='234$')參數(shù)名參數(shù)意義dsn數(shù)據(jù)源user用戶名password用戶密碼host數(shù)據(jù)庫所在主機database數(shù)據(jù)庫名稱12.2Python數(shù)據(jù)庫編程接口(DB-API)12.212.2Python數(shù)據(jù)庫編程接口(DB-API)12.2.3Connection連接對象Connection連接對象搭建了應(yīng)用程序與數(shù)據(jù)庫之間的橋梁,完成將命令送往服務(wù)器,并從服務(wù)器接收數(shù)據(jù)等功能。該對象常用方法如下表:方法描述備注cursor()方法返回給定連接上建立的游標(biāo)對象(CursorObject)。如果數(shù)據(jù)庫沒有提供對應(yīng)的游標(biāo)對象,那么將由程序來模擬實現(xiàn)游標(biāo)功能。close()馬上關(guān)閉數(shù)據(jù)連接(而不是當(dāng)__del__方法被調(diào)用的時候),連接應(yīng)該此后變得不可用,再次訪問本連接對象應(yīng)該觸發(fā)一個錯誤(Error或其子類),同樣所有使用本連接對象的游標(biāo)(cursor)對象,也會導(dǎo)致例外發(fā)生。需要注意的是,在關(guān)閉連接對象之前,沒有首先提交對數(shù)據(jù)庫的改變

將會導(dǎo)致一個隱含的回滾動作(rollback),這將丟棄之前的數(shù)據(jù)改變操作。commit()提交任何掛起的事務(wù)到數(shù)據(jù)庫中。需要注意的是,如果數(shù)據(jù)庫支持自動提交(auto-commit),必須

在初始化時關(guān)閉。一般會有一個接口函數(shù)關(guān)閉此特性。rollback()此為可選方法,對于支持事務(wù)的數(shù)據(jù)庫,調(diào)用此方法將導(dǎo)致數(shù)據(jù)庫回滾到事務(wù)開始時的狀態(tài)。關(guān)閉數(shù)據(jù)庫連接之前沒有明確調(diào)用commit()提交

數(shù)據(jù)更新,將隱含導(dǎo)致rollback()被執(zhí)行。12.2Python數(shù)據(jù)庫編程接口(DB-API)12.12.2Python數(shù)據(jù)庫編程接口(DB-API)12.2.4Cursor游標(biāo)對象游標(biāo)對象用來實現(xiàn)程序與數(shù)據(jù)庫的交互,一個游標(biāo)對象允許用戶執(zhí)行數(shù)據(jù)庫操作的相關(guān)命令以及獲取到查詢結(jié)果。該對象常用方法如下表:類別名稱描述屬性connection創(chuàng)建此游標(biāo)對象的數(shù)據(jù)庫連接arraysize使用fetchmany()方法一次取出多少條記錄,默認(rèn)為1lastrowid返回最后更新id(可選)rowcount最后一次execute()操作返回或影響的行數(shù)方法excute(sql[,args])執(zhí)行一個數(shù)據(jù)庫查詢或命令excutemany(sql,args):執(zhí)行多個數(shù)據(jù)庫查詢或命令fetchone()得到結(jié)果集的下一行fetchmany([size=cursor.arraysize])得到結(jié)果集的下幾行fetchall()得到結(jié)果集中剩下的所有行_iter_()創(chuàng)建一個迭代器對象next()使用迭代對象得到結(jié)果集的下一行close()關(guān)閉此游標(biāo)對象12.2Python數(shù)據(jù)庫編程接口(DB-API)12.212.3MySQL關(guān)系數(shù)據(jù)庫操作概述MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),目前屬于

Oracle

旗下產(chǎn)品。MySQL支持UNIX、Linux、MacOS、Windows等多種操作系統(tǒng)。目前MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一。支持MySQL的PythonDB-API在Python2.x中使用最為廣泛的是mysqldb;在Python3.x中使用最為廣泛的是PyMySQL;MySQLConnector/Python是

MySQL官方提供的

Python3.x連接

MySQL數(shù)據(jù)庫的驅(qū)動程序;12.3MySQL關(guān)系數(shù)據(jù)庫操作概述12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.1PyMySQL下載與安裝直接使用pip命令安裝$pipinstallPyMySQL安裝過程及成功界面如下圖所示。12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.1PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.2PyMySQL基本操作

數(shù)據(jù)庫連接操作PyMySQL主要是通過connect()來建立與數(shù)據(jù)庫的連接,案例代碼如下:>>>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ù)庫操作12.3.2PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.2PyMySQL基本操作

創(chuàng)建數(shù)據(jù)庫表操作>>>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ù)庫操作12.3.2PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.2PyMySQL基本操作新增、刪除、更新記錄操作Python異常處理機制try:

可能會發(fā)生異常語句塊exceptExceptionase:

第一種異常類型處理exceptExceptionase:

第二種異常類型處理except:

其他的異常類型處理else:

如果沒發(fā)生任何異常則執(zhí)行這里finally:

12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.2PyMySQ12.3MySQL關(guān)系數(shù)據(jù)庫操作12.3.2PyMySQL基本操作新增、刪除、更新記錄操作通過connection對象的cursor()方法獲取游標(biāo)cursor對象的各種方法實現(xiàn)數(shù)據(jù)庫記錄的新增、刪除與更新;新增記錄SQL語句"""INSERTINTOUserList(userID,userName,userPassword,userAge)VALUES('1','zheng','123',20)"""刪除記錄SQL語句updatesql="UPDATEUserListSETuserAge=userAge+1WHEREuserName='zheng'"更新記錄SQL語句deletesql="DELETEFROMUserListWHEREuserName='zheng'"

12.3MySQL關(guān)系數(shù)據(jù)庫操作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ù)庫操作12.3.2PyMySQL基本操作

查詢記錄操作相對于新增、修改和刪除而言,數(shù)據(jù)庫的查詢操作比較復(fù)雜,主要體現(xiàn)在對查詢結(jié)果的處理上,在實際使用過程中可以通過cursor的相關(guān)屬性和方法實現(xiàn)對結(jié)果集的獲取和處理。請參考下面示例程序;12.3MySQL關(guān)系數(shù)據(jù)庫操作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ù)庫與操作12.4.1SQLite介紹與安裝SQLite介紹SQLite是一個軟件庫,實現(xiàn)了自給自足的、無服務(wù)器的、零配置的、事務(wù)性的

SQL數(shù)據(jù)庫引擎,它的數(shù)據(jù)庫就是一個文件,SQLite直接訪問其存儲文件。與關(guān)系數(shù)據(jù)庫進(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ù)庫與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite介紹與安裝SQLite安裝1、進(jìn)入到/download.html頁面下載sqlite-tools-win32-*.zip和sqlite-dll-win32-*.zip兩個壓縮文件。2、在某個系統(tǒng)盤創(chuàng)建相關(guān)文件夾,比如E:\SQLite,然后將以上兩個文件夾解壓縮得到E:\SQLite,如果sqlite-tools-win32-*.zip解壓縮后存在子文件夾,則將該子文件夾內(nèi)的文件復(fù)制到E:\SQLite,這樣在E:\SQLite將得到sqlite3.def、sqlite3.dll、sqlite3.exe、sqldiff.exe、sqlite3_analyzer.exe五個文件。3、將添加

E:\SQLite到PATH環(huán)境變量,最后在命令提示符下,使用sqlite3

命令,將顯示如下結(jié)果,表明SQLite安裝正確。12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite介紹與安裝SQLite基本操作

SQLite命令形式第一種是在cmd命令行中執(zhí)行的命令,比如sqlite3.exe命令;第二種是進(jìn)入sqlite環(huán)境后的“點命令”,比如.help,該種命令以“.”開始,結(jié)尾沒有“;”;第三種是對數(shù)據(jù)進(jìn)行操作的命令,比如select,該種命令結(jié)尾必須以“;”結(jié)束。12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite介紹與安裝SQLite基本操作

SQLite命令:創(chuàng)建和打開數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫命令:sqlite3數(shù)據(jù)庫名創(chuàng)建成功后會進(jìn)入到sqlite操作環(huán)境在該環(huán)境中,通過“.database”查看已有的數(shù)據(jù)庫,通過“.quit”退出該環(huán)境再次輸入“sqlite3e:\sqlite\demo.db”則會進(jìn)入該已創(chuàng)建的數(shù)據(jù)庫中12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite介紹與安裝SQLite基本操作

SQLite命令:創(chuàng)建表SQLite使用CREATETABLE語句在任何給定的數(shù)據(jù)庫創(chuàng)建一個新表,創(chuàng)建基本表需要涉及到命名表、定義列及每一列的數(shù)據(jù)類型?;菊Z法如下:CREATETABLEtable_name(column1datatypePRIMARYKEY(oneormorecolumns),column2datatype,);12.4SQLite數(shù)據(jù)庫與操作12.4.1SQLite12.4SQLit

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論