版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
例9-1創(chuàng)建students表例9-1創(chuàng)建students表本例為創(chuàng)建students表示例(該表包含stuNumber、stuName、age、sex、score、address和city字段)。CREATETABLEstudents(stuNumberVARCHAR(12),stuNameVARCHAR(255),ageINTEGER(2),sexVARCHAR(2),scoreINTEGER(4),addressVARCHAR(255),cityVARCHAR(255))代碼解釋:(1)創(chuàng)建表CREATETABLEstudents(CREATETABLE是SQL語(yǔ)句的關(guān)鍵字,用于創(chuàng)建一個(gè)新的表。students是表的名稱,表示這個(gè)表將用于存儲(chǔ)學(xué)生信息。(2)定義字段stuNumberVARCHAR(12),stuNumber是一個(gè)字段名,表示學(xué)生的學(xué)號(hào)。VARCHAR(12)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)最多12個(gè)字符的字符串。stuNameVARCHAR(255),stuName是一個(gè)字段名,表示學(xué)生的姓名。VARCHAR(255)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)最多255個(gè)字符的字符串。ageINTEGER(2),age是一個(gè)字段名,表示學(xué)生的年齡。INTEGER(2)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)整數(shù),最大長(zhǎng)度為2位數(shù)字(即0到99)。sexVARCHAR(2),sex是一個(gè)字段名,表示學(xué)生的性別。VARCHAR(2)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)最多2個(gè)字符的字符串(通常用于存儲(chǔ)"男"或"女")。scoreINTEGER(4),score是一個(gè)字段名,表示學(xué)生的成績(jī)。INTEGER(4)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)整數(shù),最大長(zhǎng)度為4位數(shù)字(即0到9999)。addressVARCHAR(255),address是一個(gè)字段名,表示學(xué)生的地址。VARCHAR(255)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)最多255個(gè)字符的字符串。cityVARCHAR(255)city是一個(gè)字段名,表示學(xué)生的城市。VARCHAR(255)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)最多255個(gè)字符的字符串。(3)結(jié)束表定義)最后這個(gè)右括號(hào)表示表定義的結(jié)束。例9-2刪除students表示例本例為刪除students表示例。DROPTABLEstudents;代碼解釋:DROPTABLE是SQL語(yǔ)句的關(guān)鍵字,用于刪除一個(gè)已存在的表。students是要?jiǎng)h除的表的名稱。例9-3本例為查詢students表中所有列的數(shù)據(jù)示例。SELECT*FROMstudents;代碼解釋:SELECT是SQL查詢語(yǔ)句的關(guān)鍵字,用于從表中檢索數(shù)據(jù)。*表示選擇表中的所有列。FROM是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要從哪個(gè)表中檢索數(shù)據(jù)。students是要查詢的表的名稱。本例為查詢students表中所有記錄的stuName和stuNumber字段內(nèi)容示例。SELECTstuName,stuNumberFROMstudents;SELECT:這是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要檢索的數(shù)據(jù)。stuName,stuNumber:這里指定了要檢索的列名。stuName表示學(xué)生姓名,stuNumber表示學(xué)生學(xué)號(hào)。查詢結(jié)果將只包含這兩列的數(shù)據(jù)。FROM:這是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要從哪個(gè)表中檢索數(shù)據(jù)。students:這是要查詢的表的名稱,表示查詢將從students表中提取數(shù)據(jù)。例9-5查找姓名為“李四”的學(xué)生學(xué)號(hào)本例查找students表中姓名為“李四”的學(xué)生的學(xué)號(hào)。SELECTstuNumberFROMstudentsWHEREstuName='李四';代碼解釋:(1)SELECTstuNumber:SELECT是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要檢索的數(shù)據(jù)。stuNumber是要檢索的列名,表示查詢結(jié)果將包含students表中的stuNumber(學(xué)生學(xué)號(hào))這一列的數(shù)據(jù)。(2)FROMstudents:FROM是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要從哪個(gè)表中檢索數(shù)據(jù)。students是要查詢的表的名稱。(3)WHEREstuName='李四':WHERE是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定篩選條件。stuName='李四'是篩選條件,表示只選擇stuName列值為'李四'的記錄。例9-6本例查找students表中年齡在18~20歲之間的學(xué)生姓名。SELECTstuNameFROMstudentsWHEREageBETWEEN18AND20;代碼解釋:(1)SELECTstuName:SELECT是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要檢索的數(shù)據(jù)。stuName是要檢索的列名,表示查詢結(jié)果將包含students表中的stuName(學(xué)生姓名)這一列的數(shù)據(jù)。(2)FROMstudents:FROM是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要從哪個(gè)表中檢索數(shù)據(jù)。students是要查詢的表的名稱。(3)WHEREageBETWEEN18AND20:WHERE是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定篩選條件。ageBETWEEN18AND20是篩選條件,表示只選擇age列值在18到20(包括18和20)之間的記錄。為創(chuàng)建students表示例(該表包含stuNumber、stuName、age、sex、score、address和city字段)。CREATETABLEstudents(stuNumberVARCHAR(12),stuNameVARCHAR(255),ageINTEGER(2),sexVARCHAR(2),scoreINTEGER(4),addressVARCHAR(255),cityVARCHAR(255))代碼解釋:(1)創(chuàng)建表CREATETABLEstudents(CREATETABLE是SQL語(yǔ)句的關(guān)鍵字,用于創(chuàng)建一個(gè)新的表。students是表的名稱,表示這個(gè)表將用于存儲(chǔ)學(xué)生信息。(2)定義字段stuNumberVARCHAR(12),stuNumber是一個(gè)字段名,表示學(xué)生的學(xué)號(hào)。VARCHAR(12)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)最多12個(gè)字符的字符串。stuNameVARCHAR(255),stuName是一個(gè)字段名,表示學(xué)生的姓名。VARCHAR(255)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)最多255個(gè)字符的字符串。ageINTEGER(2),age是一個(gè)字段名,表示學(xué)生的年齡。INTEGER(2)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)整數(shù),最大長(zhǎng)度為2位數(shù)字(即0到99)。sexVARCHAR(2),sex是一個(gè)字段名,表示學(xué)生的性別。VARCHAR(2)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)最多2個(gè)字符的字符串(通常用于存儲(chǔ)"男"或"女")。scoreINTEGER(4),score是一個(gè)字段名,表示學(xué)生的成績(jī)。INTEGER(4)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)整數(shù),最大長(zhǎng)度為4位數(shù)字(即0到9999)。addressVARCHAR(255),address是一個(gè)字段名,表示學(xué)生的地址。VARCHAR(255)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)最多255個(gè)字符的字符串。cityVARCHAR(255)city是一個(gè)字段名,表示學(xué)生的城市。VARCHAR(255)是字段的數(shù)據(jù)類型,表示這個(gè)字段可以存儲(chǔ)最多255個(gè)字符的字符串。(3)結(jié)束表定義)最后這個(gè)右括號(hào)表示表定義的結(jié)束。例9-7查找籍貫為“江蘇”或“浙江”的學(xué)生本例查找students表中籍貫為“江蘇”或“浙江”的學(xué)生姓名。SELECTstuNameFROMstudentsWHEREcityIN('Jiangsu','Zhejiang');代碼解釋:(1)SELECTstuName:SELECT是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要檢索的數(shù)據(jù)。stuName是要檢索的列名,表示查詢結(jié)果將包含students表中的stuName(學(xué)生姓名)這一列的數(shù)據(jù)。(2)FROMstudents:FROM是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要從哪個(gè)表中檢索數(shù)據(jù)。students是要查詢的表的名稱。(3)WHEREcityIN('Jiangsu','Zhejiang'):WHERE是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定篩選條件。cityIN('Jiangsu','Zhejiang')是篩選條件,表示只選擇city列值為'Jiangsu'或'Zhejiang'的記錄。IN運(yùn)算符用于指定一個(gè)值是否存在于一個(gè)列表中,這里列表包含兩個(gè)字符串'Jiangsu'和'Zhejiang'。例9-8查找年齡大于18歲且性別為女本例查找students表中年齡大于18歲且性別為女生的學(xué)生姓名。SELECTstuNameFROMstudentsWHEREage>18ANDsex='女';代碼解釋:(1)SELECTstuName:SELECT是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要檢索的數(shù)據(jù)。stuName是要檢索的列名,表示查詢結(jié)果將包含students表中的stuName(學(xué)生姓名)這一列的數(shù)據(jù)。(2)FROMstudents:FROM是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要從哪個(gè)表中檢索數(shù)據(jù)。students是要查詢的表的名稱。(3)WHEREage>18ANDsex='女':WHERE是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定篩選條件。age>18是第一個(gè)篩選條件,表示只選擇age列值大于18的記錄。sex='女'是第二個(gè)篩選條件,表示只選擇sex列值為'女'的記錄。例9-9查找姓“王”的所有學(xué)生信息本例查找students表中姓“王”的所有學(xué)生信息。SELECT*FROMstudentsWHEREstuNameLIKE'王%';代碼解釋:(1)SELECT*:SELECT是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要檢索的數(shù)據(jù)。*表示選擇表中的所有列,即查詢結(jié)果將包含students表中的所有列數(shù)據(jù)。(2)FROMstudents:FROM是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要從哪個(gè)表中檢索數(shù)據(jù)。students是要查詢的表的名稱。(3)WHEREstuNameLIKE'王%':WHERE是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定篩選條件。stuNameLIKE'王%'是篩選條件,表示只選擇stuName列值以'王'開(kāi)頭的記錄。LIKE是SQL中用于模式匹配的關(guān)鍵字。'王%'是一個(gè)模式字符串,其中%是一個(gè)通配符,表示任意數(shù)量的任意字符(包括零個(gè)字符)。因此,'王%'匹配所有以'王'開(kāi)頭的字符串。例9-10查找成績(jī)?cè)?0~90之間的學(xué)生本例查找students表中成績(jī)?cè)?0~90之間的所有學(xué)生信息.SELECT*FROMstudentsWHEREscoreBETWEEN80AND90;代碼解釋:(1)SELECT*:SELECT是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要檢索的數(shù)據(jù)。*表示選擇表中的所有列,即查詢結(jié)果將包含students表中的所有列數(shù)據(jù)。(2)FROMstudents:FROM是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要從哪個(gè)表中檢索數(shù)據(jù)。students是要查詢的表的名稱。(3)WHEREscoreBETWEEN80AND90:WHERE是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定篩選條件。scoreBETWEEN80AND90是篩選條件,表示只選擇score列值在80到90(包括80和90)之間的記錄。BETWEEN是SQL中用于指定一個(gè)值是否在某個(gè)范圍內(nèi)的運(yùn)算符,是包含性的,即包括指定的上下限值。例9-11統(tǒng)計(jì)所有女生的平均成績(jī)本例統(tǒng)計(jì)students表中所有女生的平均成績(jī)。SELECTsex,AVG(score)AS平均成績(jī)FROMstudentsWHEREsex='女'GROUPBYsex;代碼解釋:(1)SELECTsex,AVG(score)AS平均成績(jī):SELECT是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要檢索的數(shù)據(jù)。sex是要檢索的列名,表示查詢結(jié)果將包含students表中的sex(性別)這一列的數(shù)據(jù)。AVG(score)是一個(gè)聚合函數(shù),用于計(jì)算score(成績(jī))列的平均值。AS平均成績(jī)是一個(gè)別名,用于將AVG(score)的結(jié)果命名為“平均成績(jī)”,使查詢結(jié)果更易于理解。(2)FROMstudents:FROM是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要從哪個(gè)表中檢索數(shù)據(jù)。students是要查詢的表的名稱。(3)WHEREsex='女':WHERE是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定篩選條件。sex='女'是篩選條件,表示只選擇sex列值為'女'的記錄。(4)GROUPBYsex:GROUPBY是SQL查詢語(yǔ)句的關(guān)鍵字,用于按指定列的值對(duì)結(jié)果進(jìn)行分組。sex是分組的依據(jù)列,表示按性別分組。例9-12查詢結(jié)果排序示例本例查找students表的stuName和stuNumber字段,查詢結(jié)果按照成績(jī)降序排列。SELECTstuName,stuNumberFROMstudentsORDERBYscoreDESC;代碼解釋:(1)SELECTstuName,stuNumber:SELECT是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要檢索的數(shù)據(jù)。stuName和stuNumber是要檢索的列名,表示查詢結(jié)果將包含students表中的stuName(學(xué)生姓名)和stuNumber(學(xué)生學(xué)號(hào))這兩列的數(shù)據(jù)。(2)FROMstudents:FROM是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定要從哪個(gè)表中檢索數(shù)據(jù)。students是要查詢的表的名稱。(3)ORDERBYscoreDESC:ORDERBY是SQL查詢語(yǔ)句的關(guān)鍵字,用于指定按哪個(gè)列的值對(duì)結(jié)果進(jìn)行排序。score是排序的依據(jù)列,表示按score(成績(jī))列的值進(jìn)行排序。DESC是排序方向的指定,表示按降序(從高到低)排序。如果省略DESC,默認(rèn)為升序(從低到高)。例9-13本例在students表中添加一條記錄。INSERTINTOstudents(stuNumber,stuName,age,sex,score,address,city)VALUES('2025005','王燕',19,'男',92,'Changjiang12','Nanjing');也可以使用簡(jiǎn)化形式,省略字段名,按照數(shù)據(jù)表中字段的順序插入:INSERTINTOstudentsVALUES('2025005','王燕',19,'男',92,'Changjiang12','Nanjing');代碼解釋:(1)INSERTINTOstudents:INSERTINTO是SQL插入語(yǔ)句的關(guān)鍵字,用于向表中添加新的記錄。students是要插入數(shù)據(jù)的表的名稱。(2)stuNumber,stuName,age,sex,score,address,city:這些是表中的列名,指定了要插入數(shù)據(jù)的列。這里列出了所有列,表示將為這些列提供值。(3)VALUES('2025005','王燕',19,'男',92,'Changjiang12','Nanjing'):VALUES是SQL插入語(yǔ)句的關(guān)鍵字,用于指定要插入的具體值。('2025005','王燕',19,'男',92,'Changjiang12','Nanjing')是一個(gè)值列表,每個(gè)值對(duì)應(yīng)前面列名中的一個(gè)列:①stuNumber:'2025005',學(xué)生學(xué)號(hào)。②stuName:'王燕',學(xué)生姓名。③age:19,學(xué)生年齡。④sex:'男',學(xué)生性別。⑤score:92,學(xué)生成績(jī)。⑥address:'Changjiang12',學(xué)生地址。⑦city:'Nanjing',學(xué)生所在城市。例9-14將學(xué)生的年齡增加一歲本例將students表中性別為“女”的學(xué)生的年齡增加一歲。UPDATEstudentsSETage=age+1WHEREsex='女';代碼解釋:(1)UPDATEstudents:UPDATE是SQL更新語(yǔ)句的關(guān)鍵字,用于修改表中的數(shù)據(jù)。students是要更新的表的名稱。(2)SETage=age+1:SET是SQL更新語(yǔ)句的關(guān)鍵字,用于指定要修改的列及其新值。age=age+1表示將age列的值增加1。這里使用了列的當(dāng)前值加上1,即每個(gè)符合條件的記錄的age列值都會(huì)加1。(3)WHEREsex='女':WHERE是SQL更新語(yǔ)句的關(guān)鍵字,用于指定更新的條件。sex='女'是篩選條件,表示只更新sex列值為'女'的記錄。例9-15更新某一行中的若干列本例將students表中“李四”的地址address修改為“Xiaolingwei200”,并增加城市city為“Nanjing”。UPDATEstudentsSETaddress='Xiaolingwei200',city='Nanjing'WHEREstuName='李四';代碼解釋:(1)UPDATEstudents:UPDATE是SQL更新語(yǔ)句的關(guān)鍵字,用于修改表中的數(shù)據(jù)。students是要更新的表的名稱。(2)SETaddress='Xiaolingwei200',city='Nanjing':SET是SQL更新語(yǔ)句的關(guān)鍵字,用于指定要修改的列及其新值。address='Xiaolingwei200':將address列的值更新為'Xiaolingwei200'。city='Nanjing':將city列的值更新為'Nanjing'。多個(gè)列的更新可以用逗號(hào)分隔,表示同時(shí)更新多個(gè)列的值。(3)WHEREstuName='李四':WHERE是SQL更新語(yǔ)句的關(guān)鍵字,用于指定更新的條件。stuName='李四'是篩選條件,表示只更新stuName列值為'李四'的記錄。例9-16刪除“張三”對(duì)應(yīng)的記錄本例在students表中刪除“張三”對(duì)應(yīng)的記錄。DELETEFROMstudentsWHEREstuName='張三';代碼解釋:(1)DELETEFROMstudents:DELETEFROM是SQL刪除語(yǔ)句的關(guān)鍵字,用于從指定的表中移除記錄。students是目標(biāo)表的名稱,即要從中刪除記錄的表。(2)WHEREstuName='張三':WHERE是SQL刪除語(yǔ)句的關(guān)鍵字,用于指定刪除的條件。stuName='張三'是篩選條件,表示僅刪除stuName列值為'張三'的記錄。例9-17創(chuàng)建數(shù)據(jù)庫(kù)和表本例創(chuàng)建數(shù)據(jù)庫(kù)test.db,并在其中創(chuàng)建表book,該表包含三列:id、price和name,其中id為主鍵(primarykey)。#導(dǎo)入PythonSQLite數(shù)據(jù)庫(kù)模塊importsqlite3#創(chuàng)建SQLite數(shù)據(jù)庫(kù)con=sqlite3.connect("D:\\test.db")#創(chuàng)建表book,包含三列:id(主鍵)、price和namecon.execute("CREATETABLEbook(idPRIMARYKEY,price,name)")代碼解釋:(1)導(dǎo)入SQLite模塊:importsqlite3這行代碼導(dǎo)入了Python的sqlite3模塊,該模塊提供了與SQLite數(shù)據(jù)庫(kù)交互的功能。(2)創(chuàng)建或連接到SQLite數(shù)據(jù)庫(kù)con=sqlite3.connect("D:\\test.db")這行代碼創(chuàng)建了一個(gè)到SQLite數(shù)據(jù)庫(kù)的連接。如果D:\\test.db路徑下的數(shù)據(jù)庫(kù)文件不存在,它會(huì)創(chuàng)建一個(gè)新數(shù)據(jù)庫(kù);如果已存在,則連接到該數(shù)據(jù)庫(kù)。con是數(shù)據(jù)庫(kù)連接對(duì)象,用于執(zhí)行后續(xù)的數(shù)據(jù)庫(kù)操作。(3)創(chuàng)建表con.execute("CREATETABLEbook(idPRIMARYKEY,price,name)")這行代碼執(zhí)行了一條SQL語(yǔ)句,用于創(chuàng)建一個(gè)名為book的新表。表包含三列:id:主鍵列,用于唯一標(biāo)識(shí)表中的每一行。price:用于存儲(chǔ)價(jià)格信息。name:用于存儲(chǔ)名稱信息。主鍵約束確保id列的每個(gè)值都是唯一的,且不能為空。例9-18插入、更新和刪除記錄操作本例為數(shù)據(jù)庫(kù)表記錄的插入、更新和刪除操作示例。importsqlite3books=[("021",25,"函數(shù)與極限"),("022",30,"導(dǎo)數(shù)與微分"),("033",18,"不定積分"),("034",35,"微分方程"),]#打開(kāi)數(shù)據(jù)庫(kù)con=sqlite3.connect("D:\\test.db")#創(chuàng)建游標(biāo)對(duì)象cur=con.cursor()#插入一行數(shù)據(jù)cur.execute("INSERTINTObook(id,price,name)VALUES('017',33,'定積分')")cur.execute("INSERTINTObook(id,price,name)VALUES(?,?,?)",("018",28,"重積分"))#插入多行數(shù)據(jù)cur.executemany("INSERTINTObook(id,price,name)VALUES(?,?,?)",books)#修改一行數(shù)據(jù)cur.execute("UPDATEbookSETprice=?WHEREname=?",(25,"導(dǎo)數(shù)與微分"))#刪除一行數(shù)據(jù)n=cur.execute("DELETEFROMbookWHEREprice=?",(25,))print("刪除了",n.rowcount,"行記錄")#提交事務(wù)mit()輸出結(jié)果:刪除了2行記錄代碼解釋:(1)導(dǎo)入模塊importsqlite3導(dǎo)入sqlite3模塊,它提供了與SQLite數(shù)據(jù)庫(kù)交互的功能。(2)定義書籍?dāng)?shù)據(jù)books=[("021",25,"函數(shù)與極限"),("022",30,"導(dǎo)數(shù)與微分"),("033",18,"不定積分"),("034",35,"微分方程"),]定義了一個(gè)包含多條書籍信息的列表books,每條書籍信息是一個(gè)元組,包含書籍的id、price和name。(3)連接到SQLite數(shù)據(jù)庫(kù)con=sqlite3.connect("D:\\test.db")使用sqlite3.connect方法連接到SQLite數(shù)據(jù)庫(kù)。如果數(shù)據(jù)庫(kù)文件不存在,會(huì)自動(dòng)創(chuàng)建一個(gè)新數(shù)據(jù)庫(kù)。這里連接到路徑為D:\\test.db的數(shù)據(jù)庫(kù)。(4)創(chuàng)建游標(biāo)對(duì)象cur=con.cursor()創(chuàng)建一個(gè)游標(biāo)對(duì)象cur,用于執(zhí)行SQL語(yǔ)句。(5)插入一行數(shù)據(jù)cur.execute("INSERTINTObook(id,price,name)VALUES('017',33,'定積分')")使用execute方法執(zhí)行SQL插入語(yǔ)句,向book表中插入一行數(shù)據(jù),值分別為id='017'、price=33、name='定積分'。(6)使用參數(shù)化查詢插入一行數(shù)據(jù)cur.execute("INSERTINTObook(id,price,name)VALUES(?,?,?)",("018",28,"重積分"))用參數(shù)化查詢的方式插入一行數(shù)據(jù),避免SQL注入。?是占位符,后面的元組("018",28,"重積分")提供了具體的值。(7)插入多行數(shù)據(jù)cur.executemany("INSERTINTObook(id,price,name)VALUES(?,?,?)",books)使用executemany方法執(zhí)行參數(shù)化查詢,批量插入多行數(shù)據(jù)。books列表中的每個(gè)元組依次作為值插入到book表中。(8)更新一行數(shù)據(jù)cur.execute("UPDATEbookSETprice=?WHEREname=?",(25,"導(dǎo)數(shù)與微分"))執(zhí)行SQL更新語(yǔ)句,將book表中name為'導(dǎo)數(shù)與微分'的記錄的price更新為25。(9)刪除一行數(shù)據(jù)n=cur.execute("DELETEFROMbookWHEREprice=?",(25,))print("刪除了",n.rowcount,"行記錄")執(zhí)行SQL刪除語(yǔ)句,刪除book表中price為25的記錄。n.rowcount返回被刪除的行數(shù),并打印出來(lái)。(11)提交事務(wù)mit()提交當(dāng)前事務(wù),確保所有操作都被保存到數(shù)據(jù)庫(kù)中。例9-19開(kāi)發(fā)學(xué)生管理數(shù)據(jù)庫(kù)系統(tǒng)本例將通過(guò)開(kāi)發(fā)一個(gè)學(xué)生管理數(shù)據(jù)庫(kù)系統(tǒng),系統(tǒng)地展示如何基于Python實(shí)現(xiàn)SQLite數(shù)據(jù)庫(kù)編程。該系統(tǒng)包含4張表:專業(yè)表、課程表、學(xué)生表和成績(jī)表,旨在實(shí)現(xiàn)對(duì)學(xué)生信息、專業(yè)信息、課程信息及成績(jī)的全面管理。數(shù)據(jù)庫(kù)系統(tǒng)構(gòu)建代碼如下:#coding=utf-8#因?yàn)楹竺鏁?huì)有中文字符,所以.py文檔應(yīng)以u(píng)tf-8編碼,以防出現(xiàn)亂碼importsqlite3conn=sqlite3.connect('Shift_MIS.db')cur=conn.cursor()cur.execute("PRAGMAforeign_keys=ON")#構(gòu)建數(shù)據(jù)表創(chuàng)建及文本數(shù)據(jù)導(dǎo)入函數(shù)defcreate_table(conn,cur,tab_name,col_prop_list,txt_path):col_name_props=','.join(col_prop_list)cur.execute(f"CREATETABLEIFNOTEXISTS{tab_name}({col_name_props})")withopen(txt_path,'r',encoding='utf-8')asf:forlineinf:x=line.rstrip().split(',')x=[value.strip()forvalueinx]#清理每個(gè)值的空格cur.execute(f'INSERTINTO{tab_name}VALUES({",".join("?"*len(x))})',x)print(f'{tab_name}創(chuàng)建成功')print(f'{txt_path}導(dǎo)入成功')mit()#構(gòu)建數(shù)據(jù)表結(jié)構(gòu)查詢函數(shù)deftable_struct(cur,tab_name):cur.execute(f"PRAGMAtable_info({tab_name})")t_struct=cur.fetchall()foritemint_struct:forxinitem:ifnotisinstance(x,str):x=str(x)print(x,end=',')print()#構(gòu)建數(shù)據(jù)表內(nèi)容查詢函數(shù)deftable_query(cur,tab_name,col_names='*',num_line=None):cur.execute(f'SELECT{col_names}FROM{tab_name}')lines=cur.fetchall()forlineinlines[:num_line]:foriteminline:ifnotisinstance(item,str):s=str(item)else:s=itemprint(s,end=',')print()#主程序if__name__=="__main__":#(1)創(chuàng)建專業(yè)表tab_name_1='專業(yè)表'col_prop_list_1=['專業(yè)編號(hào)varchar(7)primarykey','專業(yè)名稱varchar(7)']txt_path_1='專業(yè)表.txt'create_table(conn,cur,tab_name_1,col_prop_list_1,txt_path_1)#(2)創(chuàng)建學(xué)生表tab_name_2='學(xué)生表'col_prop_list_2=['學(xué)號(hào)varchar(7)primarykey','姓名varchar(7)','性別tinyint','生日textNULL','專業(yè)編號(hào)varchar(7)REFERENCES專業(yè)表(專業(yè)編號(hào))ONUPDATECASCADEONDELETECASCADE','獎(jiǎng)學(xué)金numericNULL','黨員tinyintNULL','照片blobNULL','備注textNULL']txt_path_2='學(xué)生表.txt'create_table(conn,cur,tab_name_2,col_prop_list_2,txt_path_2)#(3)創(chuàng)建課程表tab_name_3='課程表'col_prop_list_3=['課程號(hào)varchar(7)primarykey','課程名稱varchar(7)NULL','先修課程代碼varchar(7)NULL','學(xué)時(shí)smallint','學(xué)分smallint']txt_path_3='課程表.txt'create_table(conn,cur,tab_name_3,col_prop_list_3,txt_path_3)#(4)創(chuàng)建成績(jī)表tab_name_4='成績(jī)表'col_prop_list_4=['學(xué)號(hào)varchar(7)REFERENCES學(xué)生表(學(xué)號(hào))ONUPDATECASCADEONDELETECASCADE','課程號(hào)varchar(7)REFERENCES課程表(課程號(hào))ONUPDATECASCADEONDELETECASCADE','成績(jī)smallintNULL','PRIMARYKEY(學(xué)號(hào),課程號(hào))']txt_path_4='成績(jī)表.txt'create_table(conn,cur,tab_name_4,col_prop_list_4,txt_path_4)#關(guān)閉數(shù)據(jù)庫(kù)連接conn.close()以上程序運(yùn)行結(jié)果如下:專業(yè)表創(chuàng)建成功專業(yè)表.txt導(dǎo)入成功學(xué)生表創(chuàng)建成功學(xué)生表.txt導(dǎo)入成功課程表創(chuàng)建成功課程表.txt導(dǎo)入成功成績(jī)表創(chuàng)建成功成績(jī)表.txt導(dǎo)入成功此外,程序?qū)⒃?py文件的根目錄下生成數(shù)據(jù)庫(kù)文件Shift_MIS.db。數(shù)據(jù)庫(kù)操作如下。(1)將查詢數(shù)據(jù)庫(kù)中所有的數(shù)據(jù)表:>>>forxincur.execute("SELECTnameFROMsqlite_masterWHEREtype='table'ORDERBYname").fetchall():print(x[0])輸出結(jié)果:專業(yè)表學(xué)生表成績(jī)表課程表(2)將查詢所構(gòu)建數(shù)據(jù)庫(kù)中的數(shù)據(jù)表結(jié)構(gòu)及前10行內(nèi)容。專業(yè)表數(shù)據(jù)結(jié)構(gòu)查詢:>>>table_struct(cur,tab_name_1)0專業(yè)編號(hào)varchar(7)NOone11專業(yè)名稱varchar(7)NOone0前10行數(shù)據(jù)查詢:>>>table_query(cur,tab_name_1,col_names='*',num_line=10)01國(guó)際經(jīng)濟(jì)與貿(mào)易02工商管理03市場(chǎng)營(yíng)銷04電子商務(wù)05金融學(xué)06經(jīng)濟(jì)學(xué)07財(cái)務(wù)管理08商法09國(guó)際經(jīng)濟(jì)法10英語(yǔ)學(xué)生表數(shù)據(jù)結(jié)構(gòu)查詢:>>>table_struct(cur,tab_name_2)0學(xué)號(hào)varchar(7)0None1姓名varchar(7)0None2性別tinyint0None3生日text0None4專業(yè)編號(hào)varchar(7)0None5獎(jiǎng)學(xué)金numeric0None6黨員tinyint0None7照片blob0None8備注text0None前10行數(shù)據(jù)查詢(包括學(xué)號(hào)、姓名、專業(yè)和獎(jiǎng)學(xué)金):>>>col_list=u'學(xué)號(hào),姓名,專業(yè)編號(hào),獎(jiǎng)學(xué)金'>>>table_query(cur,tab_name_2,col_names=col_list,num_line=10)0305362王燕050307341王剛07¥100.000401042張志華01¥821.250402201徐欣欣02¥502.000404954魏強(qiáng)04¥438.250405342馬梁050405545徐高迪050405845鄒世華050406211王志國(guó)060408323劉軒08課程表數(shù)據(jù)結(jié)構(gòu)查詢:>>>table_struct(cur,tab_name_3)0課程號(hào)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟木烘焙工安全風(fēng)險(xiǎn)評(píng)優(yōu)考核試卷含答案
- 露天采礦吊斗鏟司機(jī)安全規(guī)程強(qiáng)化考核試卷含答案
- 信號(hào)設(shè)備制造鉗工安全理論知識(shí)考核試卷含答案
- 2025年中成藥制藥生產(chǎn)線合作協(xié)議書
- 婚假請(qǐng)假條簡(jiǎn)單的
- 2025年圓形堆取料機(jī)合作協(xié)議書
- 2025年X射線螢光光譜儀合作協(xié)議書
- 2026年情感計(jì)算與互動(dòng)消費(fèi)項(xiàng)目可行性研究報(bào)告
- 電氣工程施工方案
- 2025年新版衛(wèi)生法學(xué)各章試題及答案
- 吉林省梅河口市五中2025-2026學(xué)年高二上學(xué)期期末語(yǔ)文試卷及答案
- 2026遼寧機(jī)場(chǎng)管理集團(tuán)校招面筆試題及答案
- 2026年共青團(tuán)中央所屬單位高校畢業(yè)生公開(kāi)招聘66人備考題庫(kù)及參考答案詳解
- 2025徽銀金融租賃有限公司社會(huì)招聘筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 2026年遼寧軌道交通職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)筆試備考題庫(kù)帶答案解析
- 2026年6級(jí)英語(yǔ)模擬真題及答案
- 2025內(nèi)蒙古鄂爾多斯市委政法委所屬事業(yè)單位引進(jìn)高層次人才3人考試題庫(kù)含答案解析(奪冠)
- 2025年全國(guó)單獨(dú)招生考試綜合試卷(附答案) 完整版2025
- 2025-2026學(xué)年外研版八年級(jí)上冊(cè)英語(yǔ)期末模擬考試題(含答案)
- 高密度聚乙烯(HDPE)排水管(八角雙密封)
- 連鎖超市總部部門崗位職責(zé)說(shuō)明書
評(píng)論
0/150
提交評(píng)論