SQLite3 可使用 sqlite3 模塊與 Python 進(jìn)行集成。sqlite3 模塊是由 Gerhard Haring 編寫(xiě)的。它提供了一個(gè)與 PEP 249 描述的 DB-API 2.0 規(guī)范兼容的 SQL 接口。您不需要單獨(dú)安裝該模塊,因?yàn)?Python 2.5.x 以上版本默認(rèn)自帶了該模塊。
為了使用 sqlite3 模塊,您首先必須創(chuàng)建一個(gè)表示數(shù)據(jù)庫(kù)的連接對(duì)象,然后您可以有選擇地創(chuàng)建光標(biāo)對(duì)象,這將幫助您執(zhí)行所有的 SQL 語(yǔ)句。
簡(jiǎn)單的說(shuō),只要是python2.5.X以上的版本或者所有python3的版本都不需要安裝該模塊即可直接使用sqlite。
另外,因?yàn)閟qlite已經(jīng)內(nèi)嵌在python模塊內(nèi),所以也不需要額外安裝sqlite,也就是說(shuō)不需要安裝配置即可直接使用sqlite。
以下是重要的 sqlite3 模塊程序,可以滿(mǎn)足您在 Python 程序中使用 SQLite 數(shù)據(jù)庫(kù)的需求。如果您需要了解更多細(xì)節(jié),請(qǐng)查看 Python sqlite3 模塊的官方文檔。
序號(hào) | API & 描述 |
---|---|
1 | sqlite3.connect(database [,timeout ,other optional arguments]) 該 API 打開(kāi)一個(gè)到 SQLite 數(shù)據(jù)庫(kù)文件 database 的鏈接。您可以使用 ":memory:" 來(lái)在 RAM 中打開(kāi)一個(gè)到 database 的數(shù)據(jù)庫(kù)連接,而不是在磁盤(pán)上打開(kāi)。如果數(shù)據(jù)庫(kù)成功打開(kāi),則返回一個(gè)連接對(duì)象。 當(dāng)一個(gè)數(shù)據(jù)庫(kù)被多個(gè)連接訪問(wèn),且其中一個(gè)修改了數(shù)據(jù)庫(kù),此時(shí) SQLite 數(shù)據(jù)庫(kù)被鎖定,直到事務(wù)提交。timeout 參數(shù)表示連接等待鎖定的持續(xù)時(shí)間,直到發(fā)生異常斷開(kāi)連接。timeout 參數(shù)默認(rèn)是 5.0(5 秒)。 如果給定的數(shù)據(jù)庫(kù)名稱(chēng) filename 不存在,則該調(diào)用將創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)。如果您不想在當(dāng)前目錄中創(chuàng)建數(shù)據(jù)庫(kù),那么您可以指定帶有路徑的文件名,這樣您就能在任意地方創(chuàng)建數(shù)據(jù)庫(kù)。 |
2 | connection.cursor([cursorClass]) 該例程創(chuàng)建一個(gè) cursor,將在 Python 數(shù)據(jù)庫(kù)編程中用到。該方法接受一個(gè)單一的可選的參數(shù) cursorClass。如果提供了該參數(shù),則它必須是一個(gè)擴(kuò)展自 sqlite3.Cursor 的自定義的 cursor 類(lèi)。 |
3 | cursor.execute(sql [, optional parameters]) 該例程執(zhí)行一個(gè) SQL 語(yǔ)句。該 SQL 語(yǔ)句可以被參數(shù)化(即使用占位符代替 SQL 文本)。sqlite3 模塊支持兩種類(lèi)型的占位符:?jiǎn)柼?hào)和命名占位符(命名樣式)。 例如:cursor.execute("insert into people values (?, ?)", (who, age)) |
4 | connection.execute(sql [, optional parameters]) 該例程是上面執(zhí)行的由光標(biāo)(cursor)對(duì)象提供的方法的快捷方式,它通過(guò)調(diào)用光標(biāo)(cursor)方法創(chuàng)建了一個(gè)中間的光標(biāo)對(duì)象,然后通過(guò)給定的參數(shù)調(diào)用光標(biāo)的 execute 方法。 |
5 | cursor.executemany(sql, seq_of_parameters) 該例程對(duì) seq_of_parameters 中的所有參數(shù)或映射執(zhí)行一個(gè) SQL 命令。 |
6 | connection.executemany(sql[, parameters]) 該例程是一個(gè)由調(diào)用光標(biāo)(cursor)方法創(chuàng)建的中間的光標(biāo)對(duì)象的快捷方式,然后通過(guò)給定的參數(shù)調(diào)用光標(biāo)的 executemany 方法。 |
7 | cursor.executescript(sql_script) 該例程一旦接收到腳本,會(huì)執(zhí)行多個(gè) SQL 語(yǔ)句。它首先執(zhí)行 COMMIT 語(yǔ)句,然后執(zhí)行作為參數(shù)傳入的 SQL 腳本。所有的 SQL 語(yǔ)句應(yīng)該用分號(hào)(;)分隔。 |
8 | connection.executescript(sql_script) 該例程是一個(gè)由調(diào)用光標(biāo)(cursor)方法創(chuàng)建的中間的光標(biāo)對(duì)象的快捷方式,然后通過(guò)給定的參數(shù)調(diào)用光標(biāo)的 executescript 方法。 |
9 | connection.total_changes() 該例程返回自數(shù)據(jù)庫(kù)連接打開(kāi)以來(lái)被修改、插入或刪除的數(shù)據(jù)庫(kù)總行數(shù)。 |
10 | connection.commit() 該方法提交當(dāng)前的事務(wù)。如果您未調(diào)用該方法,那么自您上一次調(diào)用 commit() 以來(lái)所做的任何動(dòng)作對(duì)其他數(shù)據(jù)庫(kù)連接來(lái)說(shuō)是不可見(jiàn)的。 |
11 | connection.rollback() 該方法回滾自上一次調(diào)用 commit() 以來(lái)對(duì)數(shù)據(jù)庫(kù)所做的更改。 |
12 | connection.close() 該方法關(guān)閉數(shù)據(jù)庫(kù)連接。請(qǐng)注意,這不會(huì)自動(dòng)調(diào)用 commit()。如果您之前未調(diào)用 commit() 方法,就直接關(guān)閉數(shù)據(jù)庫(kù)連接,您所做的所有更改將全部丟失! |
13 | cursor.fetchone() 該方法獲取查詢(xún)結(jié)果集中的下一行,返回一個(gè)單一的序列,當(dāng)沒(méi)有更多可用的數(shù)據(jù)時(shí),則返回 None。 |
14 | cursor.fetchmany([size=cursor.arraysize]) 該方法獲取查詢(xún)結(jié)果集中的下一行組,返回一個(gè)列表。當(dāng)沒(méi)有更多的可用的行時(shí),則返回一個(gè)空的列表。該方法嘗試獲取由 size 參數(shù)指定的盡可能多的行。 |
15 | cursor.fetchall() 該例程獲取查詢(xún)結(jié)果集中所有(剩余)的行,返回一個(gè)列表。當(dāng)沒(méi)有可用的行時(shí),則返回一個(gè)空的列表。 |
下面的 Python 代碼顯示了如何連接到一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)。如果數(shù)據(jù)庫(kù)不存在,那么它就會(huì)被創(chuàng)建,最后將返回一個(gè)數(shù)據(jù)庫(kù)對(duì)象。
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully";
在這里,您也可以把數(shù)據(jù)庫(kù)名稱(chēng)復(fù)制為特定的名稱(chēng) :memory:,這樣就會(huì)在 RAM 中創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)?,F(xiàn)在,讓我們來(lái)運(yùn)行上面的程序,在當(dāng)前目錄中創(chuàng)建我們的數(shù)據(jù)庫(kù) test.db。您可以根據(jù)需要改變路徑。保存上面代碼到 sqlite.py 文件中,并按如下所示執(zhí)行。如果數(shù)據(jù)庫(kù)成功創(chuàng)建,那么會(huì)顯示下面所示的消息:
$chmod +x sqlite.py $./sqlite.py Open database successfully
下面的 Python 代碼段將用于在先前創(chuàng)建的數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)表:
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; conn.execute('''CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);''') print "Table created successfully"; conn.close()
上述程序執(zhí)行時(shí),它會(huì)在 test.db 中創(chuàng)建 COMPANY 表,并顯示下面所示的消息:
Opened database successfully Table created successfully
下面的 Python 程序顯示了如何在上面創(chuàng)建的 COMPANY 表中創(chuàng)建記錄:
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (1, 'Paul', 32, 'California', 20000.00 )"); conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (2, 'Allen', 25, 'Texas', 15000.00 )"); conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )"); conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )"); conn.commit() print "Records created successfully"; conn.close()
上述程序執(zhí)行時(shí),它會(huì)在 COMPANY 表中創(chuàng)建給定記錄,并會(huì)顯示以下兩行:
Opened database successfully Records created successfully
下面的 Python 程序顯示了如何從前面創(chuàng)建的 COMPANY 表中獲取并顯示記錄:
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; cursor = conn.execute("SELECT id, name, address, salary from COMPANY") for row in cursor: print "ID = ", row[0] print "NAME = ", row[1] print "ADDRESS = ", row[2] print "SALARY = ", row[3], "\n" print "Operation done successfully"; conn.close()
上述程序執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果:
Opened database successfully ID = 1 NAME = Paul ADDRESS = California SALARY = 20000.0 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
下面的 Python 代碼顯示了如何使用 UPDATE 語(yǔ)句來(lái)更新任何記錄,然后從 COMPANY 表中獲取并顯示更新的記錄:
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; conn.execute("UPDATE COMPANY set SALARY = 25000.00 where ID=1") conn.commit print "Total number of rows updated :", conn.total_changes cursor = conn.execute("SELECT id, name, address, salary from COMPANY") for row in cursor: print "ID = ", row[0] print "NAME = ", row[1] print "ADDRESS = ", row[2] print "SALARY = ", row[3], "\n" print "Operation done successfully"; conn.close()
上述程序執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果:
Opened database successfully Total number of rows updated : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 25000.0 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
下面的 Python 代碼顯示了如何使用 DELETE 語(yǔ)句刪除任何記錄,然后從 COMPANY 表中獲取并顯示剩余的記錄:
#!/usr/bin/python import sqlite3 conn = sqlite3.connect('test.db') print "Opened database successfully"; conn.execute("DELETE from COMPANY where ID=2;") conn.commit print "Total number of rows deleted :", conn.total_changes cursor = conn.execute("SELECT id, name, address, salary from COMPANY") for row in cursor: print "ID = ", row[0] print "NAME = ", row[1] print "ADDRESS = ", row[2] print "SALARY = ", row[3], "\n" print "Operation done successfully"; conn.close()
上述程序執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果:
Opened database successfully Total number of rows deleted : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 20000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
更多建議: