Python標(biāo)準(zhǔn)庫(kù)之?dāng)?shù)據(jù)庫(kù) sqlite3_第1頁(yè)
Python標(biāo)準(zhǔn)庫(kù)之?dāng)?shù)據(jù)庫(kù) sqlite3_第2頁(yè)
Python標(biāo)準(zhǔn)庫(kù)之?dāng)?shù)據(jù)庫(kù) sqlite3_第3頁(yè)
Python標(biāo)準(zhǔn)庫(kù)之?dāng)?shù)據(jù)庫(kù) sqlite3_第4頁(yè)
Python標(biāo)準(zhǔn)庫(kù)之?dāng)?shù)據(jù)庫(kù) sqlite3_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

第Python標(biāo)準(zhǔn)庫(kù)之?dāng)?shù)據(jù)庫(kù)sqlite3目錄1、創(chuàng)建數(shù)據(jù)庫(kù)2、插入數(shù)據(jù)3、查詢4、更新與刪除Python自帶一個(gè)輕量級(jí)的關(guān)系型數(shù)據(jù)庫(kù)SQLite。這一數(shù)據(jù)庫(kù)使用SQL語言。SQLite作為后端數(shù)據(jù)庫(kù),可以搭配Python建網(wǎng)站,或者制作有數(shù)據(jù)存儲(chǔ)需求的工具。SQLite還在其它領(lǐng)域有廣泛的應(yīng)用,比如HTML5和移動(dòng)端。Python標(biāo)準(zhǔn)庫(kù)中的sqlite3提供該數(shù)據(jù)庫(kù)的接口。

我將創(chuàng)建一個(gè)簡(jiǎn)單的關(guān)系型數(shù)據(jù)庫(kù),為一個(gè)書店存儲(chǔ)書的分類和價(jià)格。數(shù)據(jù)庫(kù)中包含兩個(gè)表:category用于記錄分類,book用于記錄某個(gè)書的信息。一本書歸屬于某一個(gè)分類,因此book有一個(gè)外鍵(foreignkey),指向catogory表的主鍵id。

1、創(chuàng)建數(shù)據(jù)庫(kù)

我首先來創(chuàng)建數(shù)據(jù)庫(kù),以及數(shù)據(jù)庫(kù)中的表。在使用connect()連接數(shù)據(jù)庫(kù)后,我就可以通過定位指針cursor,來執(zhí)行SQL命令:

#ByVamei

importsqlite3

#test.dbisafileintheworkingdirectory.

conn=sqlite3.connect("test.db")

c=conn.cursor()

#createtables

c.execute('''CREATETABLEcategory

(idintprimarykey,sortint,nametext)''')

c.execute('''CREATETABLEbook

(idintprimarykey,

sortint,

nametext,

pricereal,

categoryint,

FOREIGNKEY(category)REFERENCEScategory(id))''')

#savethechanges

mit()

#closetheconnectionwiththedatabase

conn.close()

SQLite的數(shù)據(jù)庫(kù)是一個(gè)磁盤上的文件,如上面的test.db,因此整個(gè)數(shù)據(jù)庫(kù)可以方便的移動(dòng)或復(fù)制。test.db一開始不存在,所以SQLite將自動(dòng)創(chuàng)建一個(gè)新文件。

利用execute()命令,我執(zhí)行了兩個(gè)SQL命令,創(chuàng)建數(shù)據(jù)庫(kù)中的兩個(gè)表。創(chuàng)建完成后,保存并斷開數(shù)據(jù)庫(kù)連接。

2、插入數(shù)據(jù)

上面創(chuàng)建了數(shù)據(jù)庫(kù)和表,確立了數(shù)據(jù)庫(kù)的抽象結(jié)構(gòu)。下面將在同一數(shù)據(jù)庫(kù)中插入數(shù)據(jù):

#ByVamei

importsqlite3

conn=sqlite3.connect("test.db")

c=conn.cursor()

books=[(1,1,'CookRecipe',3.12,1),

(2,3,'PythonIntro',17.5,2),

(3,2,'OSIntro',13.6,2),

#execute"INSERT"

c.execute("INSERTINTOcategoryVALUES(1,1,'kitchen')")

#usingtheplaceholder

c.execute("INSERTINTOcategoryVALUES(,,)",[(2,2,'computer')])

#executemultiplecommands

c.executemany('INSERTINTObookVALUES(,,,,)',books)

mit()

conn.close()

插入數(shù)據(jù)同樣可以使用execute()來執(zhí)行完整的SQL語句。SQL語句中的參數(shù),使用""作為替代符號(hào),并在后面的參數(shù)中給出具體值。這里不能用Python的格式化字符串,如"%s",因?yàn)檫@一用法容易受到SQL注入攻擊。

我也可以用executemany()的方法來執(zhí)行多次插入,增加多個(gè)記錄。每個(gè)記錄是表中的一個(gè)元素,如上面的books表中的元素。

3、查詢

在執(zhí)行查詢語句后,Python將返回一個(gè)循環(huán)器,包含有查詢獲得的多個(gè)記錄。你循環(huán)讀取,也可以使用sqlite3提供的fetchone()和fetchall()方法讀取記錄:

#ByVamei

importsqlite3

conn=sqlite3.connect('test.db')

c=conn.cursor()

#retrieveonerecord

c.execute('SELECTnameFROMcategoryORDERBYsort')

print(c.fetchone())

print(c.fetchone())

#retrieveallrecordsasalist

c.execute('SELECT*FROMbookWHEREbook.category=1')

print(c.fetchall())

#iteratethroughtherecords

forrowinc.execute('SELECTname,priceFROMbookORDERBYsort'):

print(row)

4、更新與刪除

你可以更新某個(gè)記錄,或者刪除記錄:

#ByVamei

conn=sqlite3.connect("test.db")

c=conn.cursor()

c.execute('UPDATEbookSETprice=WHER

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論