SQLite 資料庫的 Python 介面


SQLite 是一個開源資料庫,並且是無伺服器的,不需要任何配置。整個資料庫是一個單一磁碟檔案,可以放置在作業系統檔案系統的任何位置。SQLite 命令類似於標準 SQL。SQLite 被瀏覽器等應用程式廣泛用於內部資料儲存。它也是嵌入式裝置的便捷資料儲存。

標準 Python 庫內建支援 SQLite 資料庫連線。它包含 sqlite3 模組,該模組是由 Gerhad Haring 編寫的符合 DB-API V2 的模組。它遵循 DB-API 2.0。

DB-API 是根據 PEP-249 定義的,以確保用於訪問不同資料庫產品的 Python 模組之間的相似性。

資料庫處理過程的第一步是獲取一個表示資料庫的連線物件。接下來,使用連接獲取一個遊標物件。遊標物件類似於迭代器的概念。它用於處理資料庫查詢返回的單個行。可以將遊標視為指向一組行中某一行的指標。

遊標物件有助於執行 SQL 查詢,以對底層資料庫執行 CRUD 操作。

Connect() 函式

sqlite3 模組中的此函式返回一個連線物件,該物件表示磁碟上現有的資料庫,或者如果資料庫不存在則開啟一個新的資料庫。

import sqlite3
conn=sqlite3.connect('mydb.sqlite3')

SQLite 支援建立記憶體資料庫。為此目的,使用特殊名稱 ':memory:'。

conn=sqlite3.connect(':memory:')

以下方法在 Connection 類中定義

cursor() 此方法返回遊標物件。

cur=conn.cursor()

commit() − 此方法將事務持久地提交到磁碟。

rollback() − 此方法回滾事務以將資料庫狀態恢復到上次呼叫 commit() 的狀態。此方法可確保在 SQL 事務中出現異常時的資料一致性。

try:
conn.commit()
except:
conn.rollback()

execute() − 隱式建立遊標並呼叫其 execute() 方法

executemany() − 此方法隱式建立遊標並呼叫其 executemany() 方法

create_function() − 此方法建立一個使用者定義函式,您可以在以後從 SQL 語句中使用該函式。

create_aggregate() − 此方法建立一個聚合函式。

iterdump() − 此方法以 SQL 文字格式建立資料庫的轉儲。

import sqlite3
con = sqlite3.connect('mydb.sqlite3')
f = dump.sql', 'w')
for line in con.iterdump():
f.write('%s\n' % line)

backup() − 此方法即使在訪問 SQLite 資料庫時也能建立其備份。

source = sqlite3.connect('mydb.sqlite3')
dest = sqlite3.connect(':memory:')
source.backup(dest)

遊標物件

從連線物件獲得的遊標有助於使用 execute() 方法對資料庫執行各種 SQL 操作。例如,以下語句在當前資料庫中建立一個表

cur = conn.cursor()
cur.execute("CREATE TABLE guests (
   ID INTEGER PRIMARY KEY,
   name TEXT (20) NOT NULL,
   address TEXT (40),
   city TEXT (20)
);"

以下在表中插入一條記錄

cur.execute('''INSERT INTO GUESTS VALUES(1,'RAJU','ABIDS', 'HYDERABAD');''')

使用 executemany() 方法執行批次新增操作

addreses=[(2,'KISHAN', 'TILAK ROAD', 'PUNE'), (3, 'LATA', 'GAANDHI NAGAR', 'AURANGABAD')]
sql='INSERT INTO GUESTS VALUES (:ID, :NAME, :ADD, :CITY)'
cur.executemany(sql, addreses)

SELECT 查詢形成一個結果集,其中包含作為對查詢的響應返回的所有記錄。execute() 方法使用一個表示 SELECT 查詢語句的字串。DB-API 中有兩種方法可以檢索表示結果集的遊標中的行。

fetchone() − 從結果集中獲取下一條可用記錄,形式為一個元組,其中包含獲取的記錄的每一列的值。

fetchall() − 以元組列表的形式獲取所有剩餘記錄。每個元組對應一行,幷包含表中每一列的值。

以下程式碼使用 fetchone() 方法列出 guests 表中的所有記錄

sql = "SELECT * from guests;"
cur = db.cursor()
cur.execute(sql)
while True:
record=cur.fetchone()
if record==None:
break
print (record)

以下語句演示了 fetchall() 方法的使用

sql = "SELECT * from guests;"
cur = db.cursor()
cur.execute(sql)
set = cur.fetchall()
for record in set:
print (record)

SQLite 和 Python 型別

SQLite 資料型別預設情況下會對映到等效的 Python 資料型別,如下表所示

Python 型別
SQLite 型別
None
NULL
int
INTEGER
float
REAL
str
TEXT
bytes
BLOB

異常

DB-API 定義了以下與 SQLite 資料庫的 SQL 操作相關的異常:

DatabaseError
 針對與資料庫相關的錯誤引發的異常。
IntegrityError
 當資料庫的關係完整性受到影響時引發的異常,例如外部索引鍵檢查失敗。它是 DatabaseError 的子類。
ProgrammingError
 針對程式設計錯誤引發的異常,例如表未找到或已存在、SQL 語句中的語法錯誤、指定的引數數量錯誤等。
OperationalError
 針對與資料庫操作相關的錯誤引發的異常,這些錯誤不一定在程式設計師的控制之下。
NotSupportedError
 如果使用了資料庫不支援的方法或資料庫 API,則引發此異常。

更新於: 2019年7月30日

291 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.