




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 . Python與SQLite數(shù)據(jù)庫應(yīng)用系統(tǒng)-Python之SQLite數(shù)據(jù)庫應(yīng)用 XX(XXXX學(xué)院,班級:XX班)摘要:Python自帶一個(gè)輕量級的關(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é)者,我將進(jìn)行初步的嘗試與應(yīng)用。關(guān)鍵字:Python;SQLite;應(yīng)用;數(shù)據(jù)庫;編程一Python與SQLite數(shù)據(jù)庫關(guān)系學(xué)習(xí)初步作為新時(shí)代的大學(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、一個(gè)簡單的關(guān)系型數(shù)據(jù)庫為實(shí)例,為一個(gè)書店存儲書的分類和價(jià)格。數(shù)據(jù)庫中包含兩個(gè)表:category用于記錄分類,book用于記錄某個(gè)書的信息。一本書歸屬于某一個(gè)分類,因此book有一個(gè)外鍵(foreign key),指向catogory表的主鍵id。(一) 導(dǎo)入Python SQLITE數(shù)據(jù)庫模塊 Python2.5之后,置了SQLite3,成為了置模塊,這給我們省了安裝的功夫,只需導(dǎo)入即可在調(diào)用connect函數(shù)的時(shí)候,指定庫名稱,如果指定的數(shù)據(jù)庫存在就直接打開這個(gè)數(shù)據(jù)庫,如果不存在就新創(chuàng)建一個(gè)再打開。也可以創(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ù)庫是一個(gè)磁盤上的文件,如上面的test.db,因此整個(gè)數(shù)據(jù)庫可以方便的移動或復(fù)制。test.db一開始不存在,所以SQLite將自動創(chuàng)建一個(gè)新文件。利用execute()命令,我們執(zhí)行了兩個(gè)SQL命令,創(chuàng)建數(shù)據(jù)庫中的兩個(gè)表。創(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,因?yàn)檫@一用法容易受到SQL注入攻擊。我也可以用executemany()的方法來執(zhí)行多次插入,增加多個(gè)記錄。每個(gè)記錄是表中的一個(gè)元素,如上面的book
7、s表中的元素。(三)查詢在執(zhí)行查詢語句后,Python將返回一個(gè)循環(huán)器,包含有查詢獲得的多個(gè)記錄。你循環(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)(四)更新與刪除你可以更新某個(gè)記錄,或者刪除記錄:# 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,那么整個(gè)數(shù)據(jù)庫會被刪除。二初步嘗試與應(yīng)用(一) 說明;本次筆者創(chuàng)建數(shù)據(jù)庫將以實(shí)驗(yàn)四中題目為基礎(chǔ):設(shè)計(jì)一個(gè)數(shù)據(jù)庫,包含學(xué)生信息表、課程信息表和成績信息表,請寫出各個(gè)表的數(shù)據(jù)結(jié)構(gòu)的SQL語句;以與將進(jìn)行簡單的數(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é)生信息表和課程信息表的個(gè)別記錄數(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é)生信息表和課程信息表的個(gè)別記錄數(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()(三) 運(yùn)行結(jié)果:參考文獻(xiàn):(1) 大學(xué)計(jì)算機(jī)基礎(chǔ)(第四版)普選主編。-:清華大學(xué),2012.9(2) 博客園,博主;:Vamei三總結(jié)sqlite3只是一個(gè)SQLite的接口。想要熟練的使用SQLite數(shù)據(jù)庫,還需要學(xué)習(xí)更多的關(guān)系型數(shù)據(jù)庫的知識,Phthon確實(shí)有比較強(qiáng)大的數(shù)據(jù)庫,可以想象C+的數(shù)據(jù)庫該有多么強(qiáng)大,期待的下學(xué)期對于C+的學(xué)習(xí)。并在這里祝福每一位奮戰(zhàn)的同學(xué)期末取得好成績,過一個(gè)快樂而又充實(shí)的寒假。附錄一:個(gè)人感想附錄二:Python.Sqlite中常見函數(shù)與舉例附錄三:生成數(shù)據(jù)庫與對
16、應(yīng)的五個(gè)程序代碼(詳見額外的文件夾)附錄一通過本次實(shí)驗(yàn)探究,亦或是第一次嘗試論文的書寫,個(gè)人覺得還是有許多收獲:一方面,需要自身在比較繁忙的學(xué)業(yè)中抽出時(shí)間,合理規(guī)劃安排時(shí)間,尋找并查詢相應(yīng)Python,SQlite知識,以與它們的融合,并自學(xué)之; 另一方面,盡管在本次的論文中很許多的不成熟或是可以修改的地方,但是總體上,為了完成此次論文,還是需要許多格式的查詢,也算是提前進(jìn)行了一次論文的練習(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)建了一個(gè)叫catalog的表,它有一個(gè)主鍵id,一個(gè)pid,和一個(gè)name,name是不可以重復(fù)的,以與一個(gè)nickname默認(rèn)為NULL。 插入數(shù)據(jù) # N
18、ever do this - insecure 會導(dǎo)致注入攻擊pid=200c.execute(. where pid = %s % pid)正確的做法如下,如果t只是單個(gè)數(shù)值,也要采用t=(n,)的形式,因?yàn)樵M是不可變的。 for t in(0,10,abc,Yu),(1,20,cba,Xu): cx.execute(insert into catalog values (?,?,?,?), t)簡單的插入兩行數(shù)據(jù),不過需要提醒的是,只有提交了之后,才能生效.我們使用數(shù)據(jù)庫連接對象cx來進(jìn)行提交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(),則首先返回列表中的第一項(xiàng),再次使用,則返回第二項(xiàng),依次下去.(四)修改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)如果要顯示出中文字體,那需要依次打印出每個(gè)字符串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對象的詳細(xì)介紹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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 混凝土設(shè)備轉(zhuǎn)讓協(xié)議書
- 空調(diào)拆機(jī)協(xié)議書
- 美國航空協(xié)議書
- 清展廳出租轉(zhuǎn)讓協(xié)議書
- 老板分紅協(xié)議書
- 約定分?jǐn)倕f(xié)議書
- 調(diào)解劃扣協(xié)議書
- 肇事車輛協(xié)議書
- 菜園賠償協(xié)議書
- 員工簽署無薪資協(xié)議書
- 個(gè)人承諾書(建造師)
- 中班數(shù)學(xué)活動《破譯密碼》
- 應(yīng)急預(yù)案(危貨運(yùn)輸企業(yè))
- 高碳鉻鐵的冶煉工藝
- 畢業(yè)論文年產(chǎn)5000噸香腸工廠的初步設(shè)計(jì)
- 養(yǎng)生館營銷策劃方案
- 寧波市礦產(chǎn)資源總體規(guī)劃(提綱)
- 更換破碎機(jī)耦合器措施-
- 汽車4S店顧客抱怨處理
- 《機(jī)械裝配技術(shù)》復(fù)習(xí)題
- 匯川結(jié)構(gòu)件編碼規(guī)則PPT課件
評論
0/150
提交評論