![Python之SQLite數(shù)據(jù)庫應(yīng)用簡單應(yīng)用與講解_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/2/daba0dd8-4617-4001-9ad2-33b4776963e3/daba0dd8-4617-4001-9ad2-33b4776963e31.gif)
![Python之SQLite數(shù)據(jù)庫應(yīng)用簡單應(yīng)用與講解_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/2/daba0dd8-4617-4001-9ad2-33b4776963e3/daba0dd8-4617-4001-9ad2-33b4776963e32.gif)
![Python之SQLite數(shù)據(jù)庫應(yīng)用簡單應(yīng)用與講解_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/2/daba0dd8-4617-4001-9ad2-33b4776963e3/daba0dd8-4617-4001-9ad2-33b4776963e33.gif)
![Python之SQLite數(shù)據(jù)庫應(yīng)用簡單應(yīng)用與講解_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/2/daba0dd8-4617-4001-9ad2-33b4776963e3/daba0dd8-4617-4001-9ad2-33b4776963e34.gif)
![Python之SQLite數(shù)據(jù)庫應(yīng)用簡單應(yīng)用與講解_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/2/daba0dd8-4617-4001-9ad2-33b4776963e3/daba0dd8-4617-4001-9ad2-33b4776963e35.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、 . Python與SQLite數(shù)據(jù)庫應(yīng)用系統(tǒng)-Python之SQLite數(shù)據(jù)庫應(yīng)用 XX(XXXX學(xué)院,班級:XX班)摘要:Python自帶一個輕量級的關(guān)系型數(shù)據(jù)庫SQLite。這一數(shù)據(jù)庫使用SQL語言。SQLite作為后端數(shù)據(jù)庫,可以制作有數(shù)據(jù)存儲需求的工具。Python標(biāo)準(zhǔn)庫中的sqlite3提供該數(shù)據(jù)庫的接口?,F(xiàn)在作為初學(xué)者,我將進行初步的嘗試與應(yīng)用。關(guān)鍵字:Python;SQLite;應(yīng)用;數(shù)據(jù)庫;編程一Python與SQLite數(shù)據(jù)庫關(guān)系學(xué)習(xí)初步作為新時代的大學(xué)生學(xué)會使用網(wǎng)絡(luò)查詢相關(guān)信息非常重要,現(xiàn)在經(jīng)過初步的網(wǎng)絡(luò)學(xué)習(xí)以與書籍查詢,現(xiàn)在整理如下:(一) 創(chuàng)建數(shù)據(jù)庫注:全文學(xué)習(xí)例將以
2、一個簡單的關(guān)系型數(shù)據(jù)庫為實例,為一個書店存儲書的分類和價格。數(shù)據(jù)庫中包含兩個表:category用于記錄分類,book用于記錄某個書的信息。一本書歸屬于某一個分類,因此book有一個外鍵(foreign key),指向catogory表的主鍵id。(一) 導(dǎo)入Python SQLITE數(shù)據(jù)庫模塊 Python2.5之后,置了SQLite3,成為了置模塊,這給我們省了安裝的功夫,只需導(dǎo)入即可在調(diào)用connect函數(shù)的時候,指定庫名稱,如果指定的數(shù)據(jù)庫存在就直接打開這個數(shù)據(jù)庫,如果不存在就新創(chuàng)建一個再打開。也可以創(chuàng)建數(shù)據(jù)庫在存中。在使用connect()連接數(shù)據(jù)庫后,我就可以通過定位指針curso
3、r,來執(zhí)行SQL命令:import sqlite3# test.db is a file in the working directory.conn = sqlite3.connect(test.db)c = conn.cursor()# create tablesc.execute(CREATE TABLE category (id int primary key, sort int, name text)c.execute(CREATE TABLE book (id int primary key, sort int, name text, price real, category int
4、, FOREIGN KEY (category) REFERENCES category(id)# save the changesconn mit()# close the connection with the databaseconn.close()SQLite的數(shù)據(jù)庫是一個磁盤上的文件,如上面的test.db,因此整個數(shù)據(jù)庫可以方便的移動或復(fù)制。test.db一開始不存在,所以SQLite將自動創(chuàng)建一個新文件。利用execute()命令,我們執(zhí)行了兩個SQL命令,創(chuàng)建數(shù)據(jù)庫中的兩個表。創(chuàng)建完成后,保存并斷開數(shù)據(jù)庫連接。(二)插入數(shù)據(jù)上面創(chuàng)建了數(shù)據(jù)庫和表,確立了數(shù)據(jù)庫的抽象結(jié)構(gòu)。下面將在
5、同一數(shù)據(jù)庫中插入數(shù)據(jù):import sqlite3conn = sqlite3.connect(test.db)c = conn.cursor()books = (1, 1, Cook Recipe, 3.12, 1), (2, 3, Python Intro, 17.5, 2), (3, 2, OS Intro, 13.6, 2), # execute INSERT c.execute(INSERT INTO category VALUES (1, 1, kitchen)# using the placeholderc.execute(INSERT INTO category VALUES
6、(?, ?, ?), (2, 2, computer)# execute multiple commandsc.executemany(INSERT INTO book VALUES (?, ?, ?, ?, ?), books)conn mit()conn.close()插入數(shù)據(jù)同樣可以使用execute()來執(zhí)行完整的SQL語句。SQL語句中的參數(shù),使用?作為替代符號,并在后面的參數(shù)中給出具體值。這里不能用Python的格式化字符串,如%s,因為這一用法容易受到SQL注入攻擊。我也可以用executemany()的方法來執(zhí)行多次插入,增加多個記錄。每個記錄是表中的一個元素,如上面的book
7、s表中的元素。(三)查詢在執(zhí)行查詢語句后,Python將返回一個循環(huán)器,包含有查詢獲得的多個記錄。你循環(huán)讀取,也可以使用sqlite3提供的fetchone()和fetchall()方法讀取記錄:import sqlite3conn = sqlite3.connect(test.db)c = conn.cursor()# retrieve one recordc.execute(SELECT name FROM category ORDER BY sort)print(c.fetchone()print(c.fetchone()# retrieve all records as a listc
8、.execute(SELECT * FROM book WHERE book.category=1)print(c.fetchall()# iterate through the recordsfor row in c.execute(SELECT name, price FROM book ORDER BY sort):print(row)(四)更新與刪除你可以更新某個記錄,或者刪除記錄:# By Vameiconn = sqlite3.connect(test.db)c = conn.cursor()c.execute(UPDATE book SET price=? WHERE id=?,
9、(1000, 1)c.execute(DELETE FROM book WHERE id=2)conn mit()conn.close()我們也可以直接刪除整表:c.execute(DROP TABLE book)如果刪除test.db,那么整個數(shù)據(jù)庫會被刪除。二初步嘗試與應(yīng)用(一) 說明;本次筆者創(chuàng)建數(shù)據(jù)庫將以實驗四中題目為基礎(chǔ):設(shè)計一個數(shù)據(jù)庫,包含學(xué)生信息表、課程信息表和成績信息表,請寫出各個表的數(shù)據(jù)結(jié)構(gòu)的SQL語句;以與將進行簡單的數(shù)據(jù)錄入,刪除,修改和錄入等操作(二) 嘗試代碼:import sqlite3file=sqlite3.connect(Mydatabase.db3)flag
10、=file.cursor()flag.execute(CREATE TABLE IF NOT EXISTS student(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,sex INTEGER,classname TEXT );)flag.execute(CREATE TABLE IF NOT EXISTS course(id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT);)flag.execute(CREATE TABLE IF NOT EXISTS xk(std_id INTEGER,crs_id
11、 INTEGER,score REAL,PRIMARY KEY(std_id,crs_id);)file mit()#2. 向?qū)W生信息表和課程信息表各增加五條記錄數(shù)據(jù),請寫出增加數(shù)據(jù)的SQL語句,以“INSERT INTO”開頭。import sqlite3file=sqlite3.connect(Mydatabase.db3)flag=file.cursor()for i in(1,Zhang,0,gg51),(2,Wang,0,gg51),(3,Zhao,1,gg52),(4,Li,0,gg52),(5,Fang,1,gg51): flag.execute(insert into stud
12、ent values(?,?,?,?),i) for i in(1,Python),(2,C+),(3,Java),(4,Computer),(5,Android): flag.execute(insert into course values(?,?),i)file mit()#3. 刪除學(xué)生信息表和課程信息表的個別記錄數(shù)據(jù),請寫出刪除數(shù)據(jù)的SQL語句,以“DELETE FROM”開頭。import sqlite3file=sqlite3.connect(Mydatabase.db3)flag=file.cursor()flag.execute(SELECT * FROM student W
13、HERE id=3;)print(flag.fetchone()file mit()file.close()#4. 修改學(xué)生信息表和課程信息表的個別記錄數(shù)據(jù),請寫出修改數(shù)據(jù)的SQL語句,以“UPDATE”開頭。import sqlite3file=sqlite3.connect(Mydatabase.db3)flag=file.cursor()flag.execute(UPDATE student SET name=Liu WHERE id=4;)flag.execute(UPDATE course SET title=C+ WHERE id=2;)print(flag.fetchone()f
14、ile mit()#5.向成績信息表增加十條記錄數(shù)據(jù),請寫出增加數(shù)據(jù)的SQL語句,以“INSERT INTO”開頭。import sqlite3file=sqlite3.connect(Mydatabase.db3)flag=file.cursor()for i in(1,1,90),(1,2,80),(1,3,100),(2,1,60),(2,2,100): flag.execute(insert into xk values(?,?,?),i) for i in(2,3,90),(3,1,80),(3,2,100),(3,3,60),(4,1,76): flag.execute(inser
15、t into xk values(?,?,?),i)file mit()file.close()(三) 運行結(jié)果:參考文獻:(1) 大學(xué)計算機基礎(chǔ)(第四版)普選主編。-:清華大學(xué),2012.9(2) 博客園,博主;:Vamei三總結(jié)sqlite3只是一個SQLite的接口。想要熟練的使用SQLite數(shù)據(jù)庫,還需要學(xué)習(xí)更多的關(guān)系型數(shù)據(jù)庫的知識,Phthon確實有比較強大的數(shù)據(jù)庫,可以想象C+的數(shù)據(jù)庫該有多么強大,期待的下學(xué)期對于C+的學(xué)習(xí)。并在這里祝福每一位奮戰(zhàn)的同學(xué)期末取得好成績,過一個快樂而又充實的寒假。附錄一:個人感想附錄二:Python.Sqlite中常見函數(shù)與舉例附錄三:生成數(shù)據(jù)庫與對
16、應(yīng)的五個程序代碼(詳見額外的文件夾)附錄一通過本次實驗探究,亦或是第一次嘗試論文的書寫,個人覺得還是有許多收獲:一方面,需要自身在比較繁忙的學(xué)業(yè)中抽出時間,合理規(guī)劃安排時間,尋找并查詢相應(yīng)Python,SQlite知識,以與它們的融合,并自學(xué)之; 另一方面,盡管在本次的論文中很許多的不成熟或是可以修改的地方,但是總體上,為了完成此次論文,還是需要許多格式的查詢,也算是提前進行了一次論文的練習(xí)吧。附錄二(一)使用游標(biāo)查詢數(shù)據(jù)庫 cu=cx.cursor() 游標(biāo)對象有以下的操作: 1.execute()-執(zhí)行sql語句 2.executemany-執(zhí)行多條sql語句 3.close()-關(guān)閉游標(biāo)
17、 4.fetchone()-從結(jié)果中取一條記錄,并將游標(biāo)指向下一條記錄 5.fetchmany()-從結(jié)果中取多條記錄 6.fetchall()-從結(jié)果中取出所有記錄 7.scroll()-游標(biāo)滾動 (二)建表cu.execute(create table catalog (id integer primary key,pid integer,name varchar(10) UNIQUE,nickname text NULL)上面語句創(chuàng)建了一個叫catalog的表,它有一個主鍵id,一個pid,和一個name,name是不可以重復(fù)的,以與一個nickname默認(rèn)為NULL。 插入數(shù)據(jù) # N
18、ever do this - insecure 會導(dǎo)致注入攻擊pid=200c.execute(. where pid = %s % pid)正確的做法如下,如果t只是單個數(shù)值,也要采用t=(n,)的形式,因為元組是不可變的。 for t in(0,10,abc,Yu),(1,20,cba,Xu): cx.execute(insert into catalog values (?,?,?,?), t)簡單的插入兩行數(shù)據(jù),不過需要提醒的是,只有提交了之后,才能生效.我們使用數(shù)據(jù)庫連接對象cx來進行提交commit和回滾rollback操作.cx mit()(三)查詢cu.execute(sele
19、ct * from catalog) 要提取查詢到的數(shù)據(jù),使用游標(biāo)的fetch函數(shù),如:In 10: cu.fetchall()Out10: (0, 10, uabc, uYu), (1, 20, ucba, uXu)如果我們使用cu.fetchone(),則首先返回列表中的第一項,再次使用,則返回第二項,依次下去.(四)修改In 12: cu.execute(update catalog set name=Boy where id = 0)In 13: cx mit()注意,修改數(shù)據(jù)以后提交(五)刪除cu.execute(delete from catalog where id = 1) c
20、x mit() (六)使用中文請先確定你的IDE或者系統(tǒng)默認(rèn)編碼是utf-8,并且在中文前加上u x=u魚cu.execute(update catalog set name=? where id = 0,x)cu.execute(select * from catalog)cu.fetchall()(0, 10, uu9c7c, uYu), (1, 20, ucba, uXu)如果要顯示出中文字體,那需要依次打印出每個字符串In 26: for item in cu.fetchall(): .: for element in item: .: print element, .: print
21、.: 0 10 魚 Yu1 20 cba Xu(七)Row類型Row提供了基于索引和基于名字大小寫敏感的方式來訪問列而幾乎沒有存開銷。 原文如下:sqlite3.Row provides both index-based and case-insensitive name-based access to columns with almost no memory overhead. It will probably be better than your own custom dictionary-based approach or even a db_row based solution. Row對象的詳細介紹class sqlite3.RowA Row instance serves as a highly optimized row_factory for Connection objects. It tries to mimic a tuple in most of its features.It supports mapping access by column name and index, iteration, representation, equality testing and
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廢棄資源綜合利用的食品加工廢棄物處理與利用考核試卷
- 2025-2030年口腔種植體表面改性設(shè)備企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 2025-2030年戶外運動鞋墊舒適款企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 2025-2030年手工銀飾鑲嵌行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 發(fā)泡工藝參數(shù)優(yōu)化與控制考核試卷
- 2025-2030年可調(diào)節(jié)吧臺椅行業(yè)跨境出海戰(zhàn)略研究報告
- 2025年度私募股權(quán)投資基金收益分配與退出協(xié)議
- 2025-2030年新能源汽車保險服務(wù)行業(yè)跨境出海戰(zhàn)略研究報告
- 2025年度排水工程雨水資源化利用合同模板
- 2025-2030年復(fù)古銅質(zhì)餐具行業(yè)跨境出海戰(zhàn)略研究報告
- 重大事故隱患整改臺賬
- 2022年上海市初中畢業(yè)數(shù)學(xué)課程終結(jié)性評價指南
- DB15T 2058-2021 分梳綿羊毛標(biāo)準(zhǔn)
- 高考作文備考-議論文對比論證 課件14張
- (高職)銀行基本技能ppt課件(完整版)
- 新華師大版七年級下冊初中數(shù)學(xué) 7.4 實踐與探索課時練(課后作業(yè)設(shè)計)
- 山東省萊陽市望嵐口礦區(qū)頁巖礦
- 《普通生物學(xué)教案》word版
- 機動車維修經(jīng)營備案告知承諾書
- 安全生產(chǎn)應(yīng)知應(yīng)會培訓(xùn)課件
- 剪力墻、樓板開洞專項施工方案
評論
0/150
提交評論