SQLite – Python

SQLite - Python

安裝

SQLite3 可使用 sqlite3 模組與 Python 進行整合。sqlite3 模組是由 Gerhard Haring 編寫的。它提供了一個與 PEP 249 描述的 DB-API 2.0 規範相容的 SQL 介面。您不需要單獨安裝該模組,因為 Python 2.5.x 以上版本預設自帶了該模組。

為了使用 sqlite3 模組,您首先必須建立一個表示資料庫的連線物件,然後您可以有選擇地建立游標物件,這將幫助您執行所有的 SQL 語句。

Python sqlite3 模組 API

以下是重要的 sqlite3 模組程式,可以滿足您在 Python 程式中使用 SQLite 資料庫的需求。如果您需要了解更多細節,請檢視 Python sqlite3 模組的官方文件。

序號API & 描述
1sqlite3.connect(database [,timeout ,other optional arguments])

該 API 開啟一個到 SQLite 資料庫檔案 database 的連結。您可以使用 ":memory:" 來在 RAM 中開啟一個到 database 的資料庫連線,而不是在磁碟上開啟。如果資料庫成功開啟,則返回一個連線物件。

當一個數據庫被多個連線訪問,且其中一個修改了資料庫,此時 SQLite 資料庫被鎖定,直到事務提交。timeout 引數表示連線等待鎖定的持續時間,直到發生異常斷開連線。timeout 引數預設是 5.0(5 秒)。

如果給定的資料庫名稱 filename 不存在,則該呼叫將建立一個數據庫。如果您不想在當前目錄中建立資料庫,那麼您可以指定帶有路徑的檔名,這樣您就能在任意地方建立資料庫。

2connection.cursor([cursorClass])

該例程建立一個 cursor,將在 Python 資料庫程式設計中用到。該方法接受一個單一的可選的引數 cursorClass。如果提供了該引數,則它必須是一個擴充套件自 sqlite3.Cursor 的自定義的 cursor 類。

3cursor.execute(sql [, optional parameters])

該例程執行一個 SQL 語句。該 SQL 語句可以被引數化(即使用佔位符代替 SQL 文字)。sqlite3 模組支援兩種型別的佔位符:問號和命名佔位符(命名樣式)。

例如:cursor.execute("insert into people values (?, ?)", (who, age))

4connection.execute(sql [, optional parameters])

該例程是上面執行的由游標(cursor)物件提供的方法的快捷方式,它通過呼叫游標(cursor)方法建立了一箇中間的游標物件,然後通過給定的引數呼叫游標的 execute 方法。

5cursor.executemany(sql, seq_of_parameters)

該例程對 seq_of_parameters 中的所有引數或對映執行一個 SQL 命令。

6connection.executemany(sql[, parameters])

該例程是一個由呼叫游標(cursor)方法建立的中間的游標物件的快捷方式,然後通過給定的引數呼叫游標的 executemany 方法。

7cursor.executescript(sql_script)

該例程一旦接收到指令碼,會執行多個 SQL 語句。它首先執行 COMMIT 語句,然後執行作為引數傳入的 SQL 指令碼。所有的 SQL 語句應該用分號 ; 分隔。

8connection.executescript(sql_script)

該例程是一個由呼叫游標(cursor)方法建立的中間的游標物件的快捷方式,然後通過給定的引數呼叫游標的 executescript 方法。

9connection.total_changes()

該例程返回自資料庫連線開啟以來被修改、插入或刪除的資料庫總行數。

10connection.commit()

該方法提交當前的事務。如果您未呼叫該方法,那麼自您上一次呼叫 commit() 以來所做的任何動作對其他資料庫連線來說是不可見的。

11connection.rollback()

該方法回滾自上一次呼叫 commit() 以來對資料庫所做的更改。

12connection.close()

該方法關閉資料庫連線。請注意,這不會自動呼叫 commit()。如果您之前未呼叫 commit() 方法,就直接關閉資料庫連線,您所做的所有更改將全部丟失!

13cursor.fetchone()

該方法獲取查詢結果集中的下一行,返回一個單一的序列,當沒有更多可用的資料時,則返回 None。

14cursor.fetchmany([size=cursor.arraysize])

該方法獲取查詢結果集中的下一行組,返回一個列表。當沒有更多的可用的行時,則返回一個空的列表。該方法嘗試獲取由 size 引數指定的儘可能多的行。

15cursor.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"
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()

上述程式執行時,它會在 test.db 中建立 COMPANY 表,並顯示下面所示的訊息:

Opened database successfully
Table created successfully

INSERT 操作

下面的 Python 程式顯示瞭如何在上面建立的 COMPANY 表中建立記錄:

#!/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()

上述程式執行時,它會在 COMPANY 表中建立給定記錄,並會顯示以下兩行:

Opened database successfully
Records created successfully

SELECT 操作

下面的 Python 程式顯示瞭如何從前面建立的 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()

上述程式執行時,它會產生以下結果:

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')
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()

上述程式執行時,它會產生以下結果:

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')
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()

上述程式執行時,它會產生以下結果:

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