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,則引發此異常。 |
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP