SQLite是一個輕量級的、文件系統基礎的數據庫,它被設計為配置簡單、易于部署。SQLite數據庫存儲在一個單一的磁盤文件中,這意味著數據庫的創建和維護都非常簡單。
1. SQLite特點
- 輕量級:SQLite不需要一個獨立的服務器進程。它是一個嵌入式SQL數據庫引擎,庫文件被集成到應用程序中。
- 零配置:SQLite不需要任何配置就可以運行,這使得它非常適合小型應用、原型開發、臨時數據庫等場景。
- 跨平臺:SQLite可以在多種操作系統上運行,包括Windows、macOS、Linux、Unix等。
- 事務支持:SQLite支持ACID兼容的事務。
- 并發控制:SQLite支持讀寫并發,寫操作會鎖定數據庫,而讀操作則可以并發執行。
- 存儲限制:SQLite數據庫的大小限制為2^31個頁面,每個頁面默認為1KB,這意味著最大數據庫大小可以達到140TB(取決于頁面大小)。
- 編程語言接口:SQLite提供了多種編程語言的接口,包括C, C++, Python, Java, PHP, Ruby等。
- 無需安裝:SQLite作為一個庫文件,可以直接嵌入到應用程序中,無需單獨安裝。
- 開源:SQLite是開源軟件,根據公共領域授權發布。
- 適合輕量級應用:由于其輕量級的特性,SQLite非常適合用于移動應用、桌面應用、小型網站等。
- 內置函數豐富:SQLite提供了豐富的內置函數,可以處理字符串、日期和時間、數學運算等。
- 支持多種查詢:SQLite支持大多數SQL查詢,包括JOIN、事務、觸發器、視圖等。
2. 代碼示例
????????我們定義一個名為 AlgoInstanceDB
的類,用于管理一個SQLite數據庫,該數據庫用于存儲算法實例的信息,包括它們的唯一標識符(id
)和進程ID(pid
)。簡單描述下實現的功能:
-
初始化 (
__init__
方法):- 接收數據庫文件的路徑 (
db_path
)。 - 連接到SQLite數據庫,如果文件不存在,會自動創建。
- 調用?
create_table
?方法來確保數據庫中存在必要的表。
- 接收數據庫文件的路徑 (
-
創建表 (
create_table
方法):- 使用?
CREATE TABLE IF NOT EXISTS
?語句來創建一個名為?algo_instances
?的表,如果該表尚不存在。 - 表包含兩列:
id
(文本類型,唯一)和?pid
(整型)。
- 使用?
-
獲取算法實例的PID (
get_algo_instance_pid
方法):- 接收一個?
algo_instance_id
。 - 查詢數據庫,返回與該?
id
?相關聯的?pid
。
- 接收一個?
-
插入或更新算法實例 (
insert_algo_instance
方法):- 接收?
algo_instance_id
?和?pid
。 - 使用?
INSERT OR REPLACE
?語句來插入新記錄或更新現有記錄。 - 這確保了每個?
id
?是唯一的。
- 接收?
-
查詢算法實例 (
query_algo_instance
方法):- 接收一個?
algo_instance_id
。 - 查詢數據庫,返回與該?
id
?相關的整條記錄。
- 接收一個?
-
刪除算法實例 (
delete_algo_instance
方法):- 接收一個?
algo_instance_id
。 - 從?
algo_instances
?表中刪除與該?id
?相關聯的記錄。
- 接收一個?
-
更新算法實例的PID (
update_algo_instance
方法):- 接收?
algo_instance_id
?和?new_pid
。 - 更新?
algo_instances
?表中指定?id
?的記錄,設置新的?pid
。
- 接收?
import sqlite3class AlgoInstanceDB(object):def __init__(self, db_path):self.db_path = db_pathself.conn = sqlite3.connect(db_path)self.create_table()def create_table(self):"""創建表."""cursor = self.conn.cursor()cursor.execute("""CREATE TABLE IF NOT EXISTS algo_instances (id TEXT UNIQUE,pid INTEGER)""")self.conn.commit()def get_algo_instance_pid(self, algo_instance_id):"""獲取算法實例的PID."""cursor = self.conn.cursor()cursor.execute("SELECT pid FROM algo_instances WHERE id = ?", (algo_instance_id,))return cursor.fetchone()[0]def insert_algo_instance(self, algo_instance_id, pid):"""插入或更新算法實例."""cursor = self.conn.cursor()cursor.execute("INSERT OR REPLACE INTO algo_instances (id, pid) VALUES (?, ?)", (algo_instance_id, pid))self.conn.commit()def query_algo_instance(self, algo_instance_id):"""查詢算法實例是否存在."""cursor = self.conn.cursor()cursor.execute("SELECT * FROM algo_instances WHERE id = ?", (algo_instance_id,))return cursor.fetchone()def delete_algo_instance(self, algo_instance_id):"""刪除算法實例."""cursor = self.conn.cursor()cursor.execute("DELETE FROM algo_instances WHERE id = ?", (algo_instance_id,))self.conn.commit()def update_algo_instance(self, algo_instance_id, new_pid):"""更新算法實例的PID."""cursor = self.conn.cursor()cursor.execute("UPDATE algo_instances SET pid = ? WHERE id = ?", (new_pid, algo_instance_id))self.conn.commit()if __name__ == "__main__":db_path = "algo_instances.db"db = AlgoInstanceDB(db_path)# 示例:插入或更新算法實例# db.insert_algo_instance("A001", 1234)# 示例:查詢算法實例query = db.query_algo_instance("A002")print(query)# 示例:刪除算法實例# db.delete_algo_instance("A002")# 示例:更新算法實例的PID# db.update_algo_instance("A001", 5678)
3. 使用數據庫工具進行管理
????????DB Browser是個專門用于SQLite的數據庫管理工具,可以從這里下載:Downloads - DB Browser for SQLite,選擇所需要的系統版本下載即可。
????????使用該軟件可以可視化地查看數據庫信息,比如我們上面創建了一個關于algo instance的數據庫,可以用該工具打開并查看:
也可以瀏覽數據,查看我們寫入的內容:
參考
- SQLite Home Page
- https://en.wikipedia.org/wiki/SQLite
- Downloads - DB Browser for SQLite
- sqlite3 — DB-API 2.0 interface for SQLite databases — Python 3.12.3 documentation