Python3程序設(shè)計(jì)實(shí)戰(zhàn)教程第9章 數(shù)據(jù)庫(kù)訪問(wèn)_第1頁(yè)
Python3程序設(shè)計(jì)實(shí)戰(zhàn)教程第9章 數(shù)據(jù)庫(kù)訪問(wèn)_第2頁(yè)
Python3程序設(shè)計(jì)實(shí)戰(zhàn)教程第9章 數(shù)據(jù)庫(kù)訪問(wèn)_第3頁(yè)
Python3程序設(shè)計(jì)實(shí)戰(zhàn)教程第9章 數(shù)據(jù)庫(kù)訪問(wèn)_第4頁(yè)
Python3程序設(shè)計(jì)實(shí)戰(zhàn)教程第9章 數(shù)據(jù)庫(kù)訪問(wèn)_第5頁(yè)
已閱讀5頁(yè),還剩32頁(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)介

第9章數(shù)據(jù)庫(kù)訪問(wèn)本章學(xué)習(xí)目標(biāo)了解數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)管理系統(tǒng)的相關(guān)概念;熟練掌握常用的結(jié)構(gòu)化查詢語(yǔ)言;熟練掌握sqlite3模塊中的常用方法;熟練掌握應(yīng)用sqlite3開(kāi)發(fā)數(shù)據(jù)庫(kù)系統(tǒng)的一般流程。主要內(nèi)容數(shù)據(jù)庫(kù)基礎(chǔ)結(jié)構(gòu)化查詢語(yǔ)言SQLPythonDatabaseAPISQLite與SQLite3數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)使用實(shí)例9.1數(shù)據(jù)庫(kù)基礎(chǔ)數(shù)據(jù)庫(kù)(Database)是數(shù)據(jù)的集合,可視為電子化的文件柜——存儲(chǔ)電子文件的處所,用戶可以對(duì)文件中的數(shù)據(jù)進(jìn)行新增.截?。拢畡h除等操作。具有以下特點(diǎn):(1)數(shù)據(jù)按一定的數(shù)據(jù)模型組織、描述和儲(chǔ)存;(2)可為各種用戶共享;(3)冗余度較??;(4)數(shù)據(jù)獨(dú)立性較高;(5)易擴(kuò)展。9.1數(shù)據(jù)庫(kù)基礎(chǔ)數(shù)據(jù)庫(kù)管理系統(tǒng)(DatabaseManagementSystem,簡(jiǎn)稱DBMS)是為管理數(shù)據(jù)庫(kù)而設(shè)計(jì)的位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,一般具有存儲(chǔ)、獲取、維護(hù)、安全保障、備份等基礎(chǔ)功能,是一個(gè)大型復(fù)雜的軟件系統(tǒng)。DBMS的主要功能如下所示:(1)數(shù)據(jù)定義功能:提供數(shù)據(jù)定義語(yǔ)言(DDL),定義數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)象。(2)數(shù)據(jù)組織.存儲(chǔ)和管理:分類組織.存儲(chǔ)和管理各種數(shù)據(jù),確定組織數(shù)據(jù)的文件結(jié)構(gòu)和存取方式,實(shí)現(xiàn)數(shù)據(jù)之間的聯(lián)系,并提供多種存取方法提高存取效率。(3)數(shù)據(jù)操縱功能:提供數(shù)據(jù)操縱語(yǔ)言(DML),實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的基本操作(查詢、插入、刪除和修改)。(4)數(shù)據(jù)庫(kù)的事務(wù)管理和運(yùn)行管理:數(shù)據(jù)庫(kù)在建立.運(yùn)行和維護(hù)時(shí)由DBMS統(tǒng)一管理和控制,保證數(shù)據(jù)的安全性、完整性.多用戶對(duì)數(shù)據(jù)的并發(fā)使用,以及發(fā)生故障后的系統(tǒng)恢復(fù)。(5)數(shù)據(jù)庫(kù)的建立和維護(hù)功能:數(shù)據(jù)庫(kù)初始數(shù)據(jù)裝載轉(zhuǎn)換,數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ),介質(zhì)故障恢復(fù),數(shù)據(jù)庫(kù)的重組織,性能監(jiān)視分析等。(6)其它功能:DBMS與網(wǎng)絡(luò)中其它軟件系統(tǒng)的通信;兩個(gè)DBMS系統(tǒng)的數(shù)據(jù)轉(zhuǎn)換;異構(gòu)數(shù)據(jù)庫(kù)之間的互訪和互操作。9.1數(shù)據(jù)庫(kù)基礎(chǔ)關(guān)系數(shù)據(jù)庫(kù)是創(chuàng)建在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫(kù),借助于集合代數(shù)等數(shù)學(xué)概念和方法來(lái)處理數(shù)據(jù)庫(kù)中的數(shù)據(jù)。當(dāng)前主流的關(guān)系型數(shù)據(jù)庫(kù)有Oracle、DB2、MicrosoftSQLServer、MicrosoftAccess、MySQL及PostgreSQL等。幾乎所有的數(shù)據(jù)庫(kù)管理系統(tǒng)都配備了一個(gè)開(kāi)放式數(shù)據(jù)庫(kù)連接(ODBC)驅(qū)動(dòng)程序,令各個(gè)數(shù)據(jù)庫(kù)之間得以互相集成。因此,關(guān)系型數(shù)據(jù)庫(kù)可以用SQL語(yǔ)句方便的在一個(gè)表以及多個(gè)表之間做非常復(fù)雜的數(shù)據(jù)查詢,同時(shí),事務(wù)支持使得對(duì)于安全性能很高的數(shù)據(jù)訪問(wèn)要求得以實(shí)現(xiàn)。9.2結(jié)構(gòu)化查詢語(yǔ)言(SQL)SQL用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。此外,SQL也是數(shù)據(jù)庫(kù)腳本文件的擴(kuò)展名。結(jié)構(gòu)化查詢語(yǔ)言具有以下特點(diǎn):(1)是一種高級(jí)的非過(guò)程化編程語(yǔ)言,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。(2)它不要求用戶指定對(duì)數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式。(3)結(jié)構(gòu)化查詢語(yǔ)言語(yǔ)句可以嵌套,這使它具有極大的靈活性和強(qiáng)大的功能。SQL由六個(gè)部分組成:數(shù)據(jù)查詢語(yǔ)言(DQL)、數(shù)據(jù)操作語(yǔ)言(DML)、事務(wù)處理語(yǔ)言(TPL)、數(shù)據(jù)控制語(yǔ)言(DCL)、數(shù)據(jù)定義語(yǔ)言(DDL)和指針控制語(yǔ)言(CCL)。數(shù)據(jù)庫(kù)模式包含該數(shù)據(jù)庫(kù)中所有實(shí)體的描述定義,DDL就是用于描述數(shù)據(jù)庫(kù)中要存儲(chǔ)的現(xiàn)實(shí)世界實(shí)體的語(yǔ)言。具體包括在數(shù)據(jù)庫(kù)中創(chuàng)建、刪除和更改數(shù)據(jù)表和視圖。9.2結(jié)構(gòu)化查詢語(yǔ)言(SQL)1.創(chuàng)建數(shù)據(jù)表創(chuàng)建數(shù)據(jù)表的一般命令模式為:CREATE[TEMPORARY]TABLE[IFNOTEXISTS]<table_name>[(create_definition,...)][<select_statement>]其中:(1) TEMPORARY表示新建表為臨時(shí)表,此表將在當(dāng)前會(huì)話結(jié)束后自動(dòng)消失。臨時(shí)表主要被應(yīng)用于存儲(chǔ)過(guò)程中,對(duì)于一些目前尚不支持存儲(chǔ)過(guò)程的數(shù)據(jù)庫(kù),該關(guān)鍵字一般不用。(2) 如果聲明了IFNOTEXISTS,則只有被創(chuàng)建的表尚不存在時(shí)才會(huì)執(zhí)行CREATETABLE操作。用該選項(xiàng)可避免發(fā)生表已經(jīng)存在無(wú)法再新建的錯(cuò)誤。(3) table_name是指要待創(chuàng)建表的表名,該表名必須符合標(biāo)識(shí)符規(guī)則。通常做法是在表名中僅使用字母、數(shù)字及下畫(huà)線。(4) create_definition是CREATETABLE的關(guān)鍵所在,具體定義了表中各列的屬性。9.2結(jié)構(gòu)化查詢語(yǔ)言(SQL)2.修改數(shù)據(jù)表SQLite對(duì)ALTERTABLE命令支持的非常有限,僅僅包括重命名數(shù)據(jù)表和添加新列:(1)重命名表名:ALTERTABLE<old_table_name>RENAMETO<new_table_name>(2)新增列:ALTERTABLE<table_name>ADDCOLUMN<col_nametype>3.刪除數(shù)據(jù)表一般命令模式為:DROP[TEMPORARY][IFEXISTS]TABLE<table_name_1>[,<table_name_2>]...[RESTRICT|CASCADE]9.2結(jié)構(gòu)化查詢語(yǔ)言(SQL)4.創(chuàng)建數(shù)據(jù)視圖一般命令模式為:CREATE[IFNOTEXISTS][TEMP]VIEW<view_name>[(<column_list>)]AS<select_statement>[WHERE<conditional_statement>][WITH[CASCADED|LOCAL]CHECKOPTION]9.2結(jié)構(gòu)化查詢語(yǔ)言(SQL)5.修改數(shù)據(jù)視圖ALTERVIEW<view_name>[(column_list)]AS<select_statement>[WITH[CASCADED|LOCAL]CHECKOPTION]6.刪除視圖DROPVIEW<view_name>[,<view_name>]...[RESTRICT|CASCADE]7.清空數(shù)據(jù)表一般命令模式為:TRUNCATETABLE<table_name>[DROP/REUSESTORAGE]清空數(shù)據(jù)表操作會(huì)將數(shù)據(jù)表中所有的數(shù)據(jù)清除,但數(shù)據(jù)表結(jié)構(gòu)并不發(fā)生變化。9.2結(jié)構(gòu)化查詢語(yǔ)言(SQL)用戶通過(guò)DML實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的基礎(chǔ)操作,具體包括動(dòng)詞INSERT、UPDATE和DELETE。它們分別用于插入、更新和刪除表中的記錄。1.INSERT一般命令模式為:INSERT[INTO]<table_name>[<column_list>]VALUES(<values_list>)在該語(yǔ)句中,INSERT子句指出執(zhí)行插入操作的數(shù)據(jù)表名,也可通過(guò)子句指出表中要插入的列。VALUES子句指出在表的列中要插入的數(shù)據(jù)值。table_name是要插入行的表名。INTO關(guān)鍵字是任選的。column_list是要作為表的行插入的列表的值列表。如果必須為列提供一個(gè)缺省值的話,可以使用DEFAULT關(guān)鍵字,而不是列值。9.2結(jié)構(gòu)化查詢語(yǔ)言(SQL)2.UPDATE一般命令模式為:UPDATE<table_name>SET<column_name=new_value>[WHERE<update_condition>]在該語(yǔ)句中,table_name指需更新數(shù)據(jù)的數(shù)據(jù)表,column_name指需要更新的列名,new_value指更新的值,WHERE界定了更新條件。3.DELETE一般命令模式為:DELETEFROM<table_name>[WHERE<delete_condition>]在該語(yǔ)句中,table_name指需刪除數(shù)據(jù)的數(shù)據(jù)表,WHERE界定了刪除條件9.2結(jié)構(gòu)化查詢語(yǔ)言(SQL)數(shù)據(jù)查詢語(yǔ)句的一般命令模式為:SELECT<*|column_name_list>[INTO<new_table_name>]FROM<table_name>[WHEREsearch_condition][GROUPBYgroup_by_expression][HAVINGsearch_condition][ORDERBYorder_expression[ASC|DESC]]以上語(yǔ)句中,column_name_list為需要查詢的列名,如果為*則表示返回?cái)?shù)據(jù)表table_name中的所有列;INTOnew_table_name為可選聲明,如聲明,則表示把查詢結(jié)果保存到新建數(shù)據(jù)表new_table_name中;FROMtable_name指查詢的數(shù)據(jù)源表;WHEREsearch_conditon對(duì)數(shù)據(jù)表中的記錄進(jìn)行篩選;[GROUPBYgroup_by_expression]對(duì)滿足搜索條件返回的記錄分組;[HAVINGsearch_condition]對(duì)分組結(jié)果進(jìn)一步應(yīng)用搜索條件;[ORDERBYorder_expression[ASC|DESC]]對(duì)返回結(jié)果進(jìn)行排序,默認(rèn)排序?yàn)樯颍ˋSC)。9.2結(jié)構(gòu)化查詢語(yǔ)言(SQL)9.3PythonDatabaseAPI簡(jiǎn)介PythonDatabaseAPI庫(kù)(以下統(tǒng)一簡(jiǎn)稱為DB-API),支持與多種市場(chǎng)上應(yīng)用廣泛的數(shù)據(jù)庫(kù)之間的連接。在DB-API中,即便所有數(shù)據(jù)庫(kù)連接模塊的底層網(wǎng)絡(luò)協(xié)議不同,它們也會(huì)有著一個(gè)共同的接口。DB-API目前最新版本是2.0,支持關(guān)系型數(shù)據(jù)庫(kù)包括IBMDB2、Firebird(或Interbase)、Informix、Ingres、MySQL、Oracle、PostgreSQL、SAPDB(也稱為MaxDB)、MicrosoftSQLServer和Sybase等。此外,DB-API支持Teradata和IBMNetezza數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng),也支持asql,GadFly,SQLite和ThinkSQL等應(yīng)用程序內(nèi)嵌數(shù)據(jù)庫(kù)系統(tǒng)。任意數(shù)據(jù)庫(kù)模塊使用DB-API連接數(shù)據(jù)庫(kù)系統(tǒng)時(shí),需定義以下三個(gè)關(guān)于模塊的全局變量:(1)apilevel:應(yīng)用程序接口層級(jí),字符串常量,可選值為'1.0'或'2.0',用于聲明所使用的DB-API的版本。由于目前DB-API的最新版本為2.0,apilevel的取值只可能是'1.0'或'2.0'。(2)threadsafety:線程安全等級(jí),整數(shù)常量,可選值為0,1,2,3,用于聲明模塊的線程安全等級(jí)。0表示線程完全不共享模塊;1表示線程共享模塊,但不共享連接;2表示線程共享模塊與連接;3表示線程共享模塊、連接和指針。(3)parastyle:參數(shù)風(fēng)格,字符串常量,可選值為'qmark','numeric','named','format'和'pyformat',用于聲明在執(zhí)行多次類似查詢時(shí),參數(shù)如何被整合到SQL語(yǔ)句中。'qmark'表示使用問(wèn)號(hào);'numeric'表示使用:1或:2風(fēng)格的列;'named'表示命名風(fēng)格;'format'表示標(biāo)準(zhǔn)的字符串格式化;'pyformat'表示Python擴(kuò)展格式化代碼。以上全局參數(shù)并不會(huì)在具體的Python數(shù)據(jù)庫(kù)編程中涉及,數(shù)據(jù)庫(kù)接口結(jié)構(gòu)對(duì)這些參數(shù)的處理方法將會(huì)在相應(yīng)數(shù)據(jù)庫(kù)接口文檔中解釋。9.3PythonDatabaseAPI簡(jiǎn)介

連接與游標(biāo)在對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作之前,需首先構(gòu)建Python程序與數(shù)據(jù)庫(kù)之間的連接。DB-API標(biāo)準(zhǔn)化了連接對(duì)象。具體而言,它包含以下幾個(gè)內(nèi)置方法:(1).close():關(guān)閉當(dāng)前連接。如果未在關(guān)閉一個(gè)連接之前提交事務(wù),則連接將觸發(fā)一個(gè)隱含的回滾。(2).commit():提交當(dāng)前所有掛起事務(wù)。(3).rollback():回滾掛起事務(wù)。(4).cursor():返回一個(gè)使用該連接的新游標(biāo)對(duì)象。如果數(shù)據(jù)庫(kù)未提供直接的游標(biāo)概念,則數(shù)據(jù)庫(kù)模塊需通過(guò)其他方式模擬游標(biāo)。連接與游標(biāo)

游標(biāo)對(duì)象內(nèi)置方法和屬性9.4SQLiteSQLite已內(nèi)嵌于Python中,無(wú)需再安裝。SQLite是RichardHipp建立的公有領(lǐng)域項(xiàng)目,其設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已應(yīng)用于大量嵌入式產(chǎn)品。SQLite屬于輕型數(shù)據(jù)庫(kù),它遵守ACID(原子性A、一致性C、隔離性I和持久性D)原則,這也就意味著它支持事物(Transaction)處理。SQLite占用資源率非常的低,在嵌入式設(shè)備中,可能只需要占用其幾百K的內(nèi)存。它能夠在大部分主流的操作系統(tǒng)環(huán)境下運(yùn)行,同時(shí)能夠跟多種流行程序語(yǔ)言結(jié)合使用,比如Python、C#、PHP和Java等,還有ODBC接口。最后,與其他兩款開(kāi)源的世界著名數(shù)據(jù)庫(kù)管理系統(tǒng)(Mysql和PostgreSQL)相比,SQLite的處理速度更快。SQLite采用更為一般的動(dòng)態(tài)類型系統(tǒng),具體而言,值的數(shù)據(jù)類型跟值本身相關(guān),而與它的存放列無(wú)關(guān)。SQLite的動(dòng)態(tài)類型系統(tǒng)和其他數(shù)據(jù)庫(kù)的靜態(tài)類型系統(tǒng)是相互兼容的,但同時(shí),SQLite中的動(dòng)態(tài)類型允許它可以做到一些傳統(tǒng)靜態(tài)類型數(shù)據(jù)庫(kù)不可能完成的事。9.4SQLite1.存儲(chǔ)類和數(shù)據(jù)類型任何存儲(chǔ)在SQLite數(shù)據(jù)庫(kù)中或者由這個(gè)數(shù)據(jù)庫(kù)引擎操作的值都屬于以下一個(gè)存儲(chǔ)類:(1)NULL,值是NULL;(2)INTEGER,值是有符號(hào)整型,根據(jù)值的大小以1、2、3、4、6或8字節(jié)存放;(3)REAL,值是浮點(diǎn)型,以8字節(jié)IEEE浮點(diǎn)數(shù)存放;(4)TEXT,值是文本字符串,使用數(shù)據(jù)庫(kù)編碼(UTF-8,UTF-16BE或者UTF-16LE)存放;(5)BLOB,值是一個(gè)數(shù)據(jù)塊,完全按照輸入存放(即沒(méi)有轉(zhuǎn)換)。由從上可以看出,與數(shù)據(jù)類型相比,存儲(chǔ)類更一般化。例如,對(duì)于INTEGER存儲(chǔ)類,它具有6種不同長(zhǎng)度的不同整型數(shù)據(jù)類型,這在磁盤(pán)上造成了差異。但是,一旦INTEGER值從磁盤(pán)讀取到內(nèi)存中處理,它們都將被轉(zhuǎn)換成最一般的數(shù)據(jù)類型(8字節(jié)有符號(hào)整形)。9.4SQLite1.存儲(chǔ)類和數(shù)據(jù)類型對(duì)于SQLliteV3數(shù)據(jù)庫(kù),除使用整型的主鍵外,其他列可用于存儲(chǔ)任何一個(gè)存儲(chǔ)列的值。SQL語(yǔ)句中的所有值的存儲(chǔ)類型都是未定的。下列情況中,數(shù)據(jù)庫(kù)引擎會(huì)在執(zhí)行查詢過(guò)程中在數(shù)值存儲(chǔ)類型(INTEGER和REAL)和文本存儲(chǔ)類(TEXT)之間轉(zhuǎn)換值:(1)布爾類型。SQLite并沒(méi)有單獨(dú)的布爾存儲(chǔ)類型,它使用INTEGER作為存儲(chǔ)類型,0為False,1為T(mén)rue。(2)Date和Time類型。SQLite也沒(méi)有為存儲(chǔ)日期和時(shí)間設(shè)定一個(gè)存儲(chǔ)類,但內(nèi)置的SQLite日期和時(shí)間函數(shù)能夠?qū)⑷掌诤蜁r(shí)間以TEXT、REAL或INTEGER形式存儲(chǔ)。如:TEXT,以IS08601字符串(“YYYY-MM-DDHH:MM:SS.SSS”)存儲(chǔ);REAL,以從格林威治時(shí)間公元前4714年11月24日中午以來(lái)的天數(shù)存儲(chǔ);INTEGER,以從1970-01-0100:00:00UTC以來(lái)的秒數(shù)存儲(chǔ)。9.4SQLite2.a(chǎn)ffinity類型為了最大化SQLite和其他數(shù)據(jù)庫(kù)間的兼容性,SQLite支持列類型affinity。任何列能存儲(chǔ)任意類型的數(shù)據(jù)。只是對(duì)于一些列,如果給予選擇的話,相比于其他的一些類型,將會(huì)優(yōu)先選擇某些存儲(chǔ)類型,這個(gè)列優(yōu)先選擇的存儲(chǔ)類型被稱為它的affinity。任意SQLiteV3數(shù)據(jù)庫(kù)中的列都被賦予下面affinity類型中的一種:TEXT、NUMERIC、INTEGER、REAL和NONE。9.4SQLite3.列affinity存儲(chǔ)類型的決定規(guī)則列的聲明數(shù)據(jù)類型決定了列affinity存儲(chǔ)類,主要遵循以下優(yōu)先規(guī)則:(1)聲明類型包含'INT'字符串,那么這個(gè)列被賦予INTEGER近似。(2)聲明類型包含'CHAR'、'CLOB'或者'TEXT'中的任意一個(gè),那么這個(gè)列屬于TEXTaffinity。注意類型VARCHAR包含了'CHAR'字符串,那么也就被賦予了TEXTaffinity。(3)聲明類型中包含了字符串'BLOB'或沒(méi)有為其聲明類型,這個(gè)列被賦予affinityNONE。(4)其他的情況,列被賦予NUMERICaffinity。例如,一個(gè)列的聲明類型為'CHARINT'的列同時(shí)會(huì)匹配規(guī)則1和2,但是第一個(gè)規(guī)則占有優(yōu)先級(jí)所以這個(gè)列的近似將是INTEGER。9.4SQLite9.5sqlite3模塊Python的標(biāo)準(zhǔn)庫(kù)已包含一個(gè)PySQLite模塊,用于實(shí)現(xiàn)SQLite相關(guān)操作。因此使用較新版本Python的用戶無(wú)需再單獨(dú)安裝PySQLite和SQLite就可實(shí)現(xiàn)數(shù)據(jù)庫(kù)編程。在具體編程中,可以將SQLite作為名為sqlite3的模塊導(dǎo)入,然后使用DB-API中相關(guān)的工具與方法進(jìn)行Python數(shù)據(jù)庫(kù)編程。>>>importsqlite39.5sqlite3模塊1.創(chuàng)建(打開(kāi))數(shù)據(jù)庫(kù)sqlite3模塊遵循DB-API的一般方法,因此應(yīng)構(gòu)建起Python程序與SQLite之間的連接??赏ㄟ^(guò)創(chuàng)建連接對(duì)象實(shí)現(xiàn)該功能:>>>importsqlite3>>>conn=sqlite3.connect('test.db')以上語(yǔ)句構(gòu)建了一個(gè)名稱為conn的連接對(duì)象,通過(guò)它可實(shí)現(xiàn)Python程序與SQLite數(shù)據(jù)庫(kù)test.db之間的連接。如果test.db數(shù)據(jù)庫(kù)文件已經(jīng)存在,則會(huì)打開(kāi)該數(shù)據(jù)庫(kù),建立起它與程序之間的連接;如果test.db數(shù)據(jù)庫(kù)文件不存在,則在程序根目錄下新建該數(shù)據(jù)庫(kù)文件,并建立起連接。2.創(chuàng)建游標(biāo)一旦構(gòu)建了連接對(duì)象,就可以使用DB-API的標(biāo)準(zhǔn)方法:利用cursor()新建一個(gè)游標(biāo)對(duì)象;利用execute()執(zhí)行SQL語(yǔ)句;利用commit()執(zhí)行事務(wù)提交;利用rollback()實(shí)現(xiàn)事物回滾;利用close()實(shí)現(xiàn)數(shù)據(jù)庫(kù)系統(tǒng)關(guān)閉。為了進(jìn)一步的SQL操作,需進(jìn)一步構(gòu)建的一個(gè)游標(biāo)對(duì)象:>>>cur=conn.cursor()9.5sqlite3模塊3.創(chuàng)建表已經(jīng)有了test.db數(shù)據(jù)庫(kù)的連接和游標(biāo)。在此基礎(chǔ)上,應(yīng)首先構(gòu)建兩個(gè)數(shù)據(jù)表:genre和book。>>>cur.execute('''CREATETABLEgenre(g_idintegerPRIMARYKEY,g_namevarchar(10)NOTNULL)''')>>>cur.execute('''CREATETABLEbook(b_idintegerPRIMARYKEY,b_namevarchar(10)NOTNULL,b_pricefloatNOTNULL,b_datetextNULL,b_genreREFERENCESgenre(g_id)ONUPDATECASCADEONDELETECASCADE)''')9.5sqlite3模塊3.創(chuàng)建表數(shù)據(jù)表genre包含兩個(gè)列g(shù)_id和g_name,其中g(shù)_id是種類編號(hào),整型,主鍵;g_name是種類名稱,字符型,不為空。數(shù)據(jù)表book包含五個(gè)列,其中對(duì)b_genre應(yīng)用了外鍵約束UPDATECASCADE和DELETECASCADE,即如果genre中的g_id如果被更新或者刪除,則b_genre也會(huì)進(jìn)行相應(yīng)更新或刪除。如果需要在已構(gòu)建的表中增加列,則可通過(guò)運(yùn)行以下類似語(yǔ)句實(shí)現(xiàn):>>>cur.execute('''ALTERTABLEgenreADDCOLUMNg_commtextNULL''')以上語(yǔ)句實(shí)現(xiàn)了往表genre插入新列g(shù)_comm。9.5sqlite3模塊4.插入數(shù)據(jù)構(gòu)建好表的結(jié)構(gòu)之后,就可以往表中插入數(shù)據(jù)。5.更新數(shù)據(jù)在具體數(shù)據(jù)庫(kù)應(yīng)用中,更新操作是維護(hù)數(shù)據(jù)庫(kù)系統(tǒng)的重要方法之一。如果要將編號(hào)為31的書(shū)籍的價(jià)格修改為$45,則可通過(guò)運(yùn)行以下語(yǔ)句實(shí)現(xiàn):>>>cur.execute("UPDATEbookSET

溫馨提示

  • 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)論