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