SQLite3 可使用 sqlite3 模組與 Python 進行整合。 sqlite3 模組是由 Gerhard Haring 編寫的。它提供了一個與 PEP 249 所描述的 DB-API 2.0 規範相容的 SQL 介面。您不需要單獨安裝模組,因為 Python 2.5.x 以上版本預設自帶了這個模組。
以下是重要的 sqlite3 模組程序,可以滿足您在 Python 程式中使用 SQLite 資料庫的需求。如果您需要了解更多細節,請查看 Python sqlite3 模組的官方文件。
序號 | #API & 描述 |
---|
#1 | sqlite3.connect (database [,timeout ,other optional arguments])
該API 開啟一個到SQLite 資料庫檔案database 的連結。您可以使用 ":memory:" 來在 RAM 中開啟一個到 database 的資料庫連接,而不是在磁碟上開啟。如果資料庫成功打開,則傳回連接物件。 當一個資料庫被多個連接訪問,且其中一個修改了資料庫,此時 SQLite 資料庫被鎖定,直到事務提交。 timeout 參數表示連線等待鎖定的持續時間,直到發生異常斷開連線。 timeout 參數預設是 5.0(5 秒)。 如果給定的資料庫名稱 filename 不存在,則該呼叫將建立一個資料庫。如果您不想在目前目錄中建立資料庫,那麼您可以指定帶有路徑的檔案名,這樣您就能在任意地方建立資料庫。 |
2 | connection.cursor([cursorClass])
該例程建立一個 cursor,將在Python 資料庫程式設計中用到。此方法接受一個單一的可選的參數 cursorClass。如果提供了該參數,則它必須是一個擴展自 sqlite3.Cursor 的自訂的 cursor 類別。 |
3 | cursor.execute(sql [, optional parameters])
該例程執行一個SQL 語句。這個 SQL 語句可以被參數化(即使用佔位符來取代 SQL 文字)。 sqlite3 模組支援兩種類型的佔位符:問號和命名佔位符(命名樣式)。 例如:cursor.execute("insert into people values (?, ?)", (who, age)) |
4 | connection.execute(sql [, optional parameters])
此例程是上面執行的由遊標(cursor)物件提供的方法的捷徑,它透過呼叫遊標( cursor)方法建立了一個中間的遊標對象,然後透過給定的參數呼叫遊標的execute 方法。 |
5 | cursor.executemany(sql, seq_of_parameters)
該例程對seq_of_parameters 中的所有參數或映射執行一個SQL 指令。 |
6 | connection.executemany(sql[, parameters])
該例程是一個由呼叫遊標(cursor)方法建立的中間的遊標物件的捷徑,然後透過給定的參數呼叫遊標的executemany 方法。 |
7 | cursor.executescript(sql_script)
該例程一旦接收到腳本,就會執行多個SQL 語句。它首先執行 COMMIT 語句,然後執行作為參數傳入的 SQL 腳本。所有的 SQL 語句都應該用分號(;)分隔。 |
8 | connection.executescript(sql_script)
該例程是由呼叫遊標(cursor )方法建立的中間的遊標物件的捷徑,然後透過給定的參數呼叫遊標的executescript 方法。 |
9 | connection.total_changes()
此例程傳回自資料庫連線開啟以來已修改、插入或刪除的資料庫總行數。 |
10 | connection.commit()
該方法提交目前的交易。如果您未呼叫該方法,那麼自您上一次呼叫 commit() 以來所做的任何動作對其他資料庫連線來說是不可見的。 |
11 | connection.rollback()
此方法回溯自上次呼叫commit()以來對資料庫所做的更改。 |
12 | connection.close()
此方法關閉資料庫連線。請注意,這不會自動呼叫 commit()。如果您之前未呼叫 commit() 方法,就直接關閉資料庫連接,您所做的所有變更將全部遺失! |
13 | cursor.fetchone()
此方法取得查詢結果集的下一行,傳回一個單一的序列,當沒有更多可用的資料時,則傳回None。 |
14 | cursor.fetchmany([size=cursor.arraysize]) ##該方法取得查詢結果集中的下一行組,傳回一個清單。當沒有更多的可用的行時,則傳回一個空的列表。此方法嘗試取得由 size 參數指定的盡可能多的行。 |
15 | cursor.fetchall() 此例程取得查詢結果集所有(剩餘)的行,傳回一個列表。當沒有可用的行時,則傳回一個空的清單。 |
#連接資料庫
下面的 Python 程式碼顯示如何連接到一個現有的資料庫。如果資料庫不存在,那麼它就會被創建,最後將傳回一個資料庫物件。
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";
在這裡,您也可以把資料庫名稱複製為特定的名稱 :memory:,這樣就會在 RAM 中建立一個資料庫。現在,讓我們來運行上面的程序,在當前目錄中建立我們的資料庫 test.db。您可以根據需要改變路徑。將上面程式碼保存到 sqlite.py 檔案中,並按如下所示執行。如果資料庫成功創建,那麼會顯示下面所示的訊息:
$chmod +x sqlite.py
$./sqlite.py
Open database successfully
建立表格
下面的Python 程式碼片段將用於在先前建立的資料庫中建立一個表格:
#!/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()
上述程式執行時,它會在test.db 中建立COMPANY 表,並顯示下面所示的訊息:
Opened database successfully
Table created successfully
INSERT 操作
#下面的Python 程式顯示如何在上面建立的COMPANY 表中建立記錄:
#!/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()
上述程式執行時,它會在COMPANY 表中建立給定記錄,並會顯示以下兩行:
Opened database successfully
Records created successfully
SELECT 操作
下面的Python 程式顯示如何從前面建立的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()
上述程式執行時,它會產生以下結果:
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
UPDATE 操作
下面的Python 程式碼顯示如何使用UPDATE 語句來更新任何記錄,然後從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()
上述程式執行時,它會產生以下結果:
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
DELETE 操作
下面的Python 程式碼顯示如何使用DELETE 語句刪除任何記錄,然後從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()
上述程式執行時,它會產生以下結果:
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
#