SQLite:一個極簡使用教程

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的數據庫,可以用該工具打開并查看:

也可以瀏覽數據,查看我們寫入的內容:

參考

  1. SQLite Home Page
  2. https://en.wikipedia.org/wiki/SQLite
  3. Downloads - DB Browser for SQLite
  4. sqlite3 — DB-API 2.0 interface for SQLite databases — Python 3.12.3 documentation

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36887.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36887.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36887.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

萬物皆可爬——亮數據代理IP+Python爬蟲批量下載百度圖片助力AI訓練

💂 個人網站:【 摸魚游戲】【神級代碼資源網站】【導航大全】🤟 一站式輕松構建小程序、Web網站、移動應用:👉注冊地址🤟 基于Web端打造的:👉輕量化工具創作平臺💅 想尋找共同學習交…

注意!!2024下《網絡規劃設計師》易混淆知識點來了,趕緊碼住

寶子們,在復習軟考網絡規劃設計師中,是不是覺得有很多知識點含義比較相近,很多友友剛看的時候,估計會像我一樣把它們弄混,作為一個軟考老鳥,在這里給大家整理了網規學習過程中易混淆的知識點,大…

新版彩虹云商城卡密商城/自動發卡可分站多套模板可選

完整免授權彩虹源碼(多模板+小儲云商城模板)版本 6.7.5,部分代碼加密,使用起來一點問題都沒有,加密部分是授權那一塊,可以二開更改一下,就完事 無差錯,免授權,功能齊全,模板齊全。 后臺可設置的模板有 20 套,喜歡的就購買研究學習 支持多個接口,支持到賬到個人錢…

Detailed Steps for Troubleshooting ORA-00600 [kdsgrp1] (文檔 ID 1492150.1)

Detailed Steps for Troubleshooting ORA-00600 [kdsgrp1] (文檔 ID 1492150.1)?編輯轉到底部 In this Document Purpose Troubleshooting Steps References APPLIES TO: Oracle Database - Enterprise Edition Oracle Database Cloud Schema Service - Version N/A and lat…

Android 生成 AAR 包

當我們需要在 Android 項目中引用第三方庫或模塊時,常常會使用 AAR(Android Archive)包。AAR 包是一種包含了編譯后代碼、資源文件和清單文件等的二進制文件。 步驟 1:創建一個 Android Library 項目 在 Android Studio 中&#…

Ngnix內存池——高并發實現高效內存管理

目錄 一、高并發下傳統方式的弊端 1、常用的內存操作函數 2、弊端一 3、弊端二 4、弊端三 5、弊端四 二、弊端解決之道 1、內存管理維度分析 2、內存管理組件選型 三、高并發內存管理最佳實踐 1、內存池技術 2、內存池如何解決弊端 3、高并發內存池如何實現 四、…

FC-Planner: 一個基于骨架引導的快速覆蓋復雜3D場景的規劃框架方案實現與難點講解

FC-Planner方案實現細節與難點講解 1. 骨架提取 骨架提取是FC-Planner的核心模塊之一,其目的是從輸入的點云數據中提取出場景的骨架結構。這一步的關鍵是如何準確高效地計算每個點的ROSA點。 1.1 ROSA點計算 ROSA點的計算涉及到兩個優化問題: ROSA點方向 v p v_p vp?的優化…

《數字圖像處理與機器視覺》案例二(基于邊緣檢測和數學形態學焊縫圖像處理)

一、前言 焊縫是評價焊接質量的重要標志,人工檢測方法存在檢測標準不統一,檢測精度低,焊縫視覺檢測技術作為一種重要的質量檢測方法,正逐漸在各行各業中嶄露頭角。把焊縫準確的從焊接工件中準確分割出來是焊縫評價的關鍵一步&…

linux上git的使用

目錄 1.測試是否安裝有git 2.下載項目到本地 3.三板斧 1.將代碼放在創建的目錄中 2.提交改動到本地 3.提交代碼到遠端 4.注意點 以及補充內容 1.測試是否安裝有git 如果輸入git --help 會顯示下面一大串那么就是已經安裝,否則需要自行手動安裝 yum install g…

聚焦從業人員疏散逃生避險意識能力提升,推動生產經營單位每年至少組織開展(疏散逃生演練,讓全體從業人員熟知逃生通道、安全出口及應急處置要求,形成常態化機制。

聚焦從業人員疏散逃生避險意識能力提升,推動生產經營單位每年至少組織開展(疏散逃生演練,讓全體從業人員熟知逃生通道、安全出口及應急處置要求,形成常態化機制。完整試題答案查看 A.三次B.兩次C.一次 綜合運用“四不兩直”、明察暗訪、 ()、…

潔盟超聲波清洗機怎么樣?橫向測評希亦、潔盟、蘇泊爾超聲波清洗機誰是實力派

生活中大多數人戴眼鏡,但是很多人都不注意眼鏡的保養,導致鏡片越來越模糊,從而引發多邊的狀況發生,比如長久戴模糊不清的眼鏡,視力會受到影響隨之下降。甚至是眼鏡長期不清洗,上面的灰塵、細菌會影響眼部健…

彩虹PLM系統在航空航天業的應用與實踐

彩虹PLM系統在航空航天業的應用與實踐 彩虹PLM系統作為航空航天業的卓越解決方案,已經在眾多企業中得到了廣泛的應用和實踐。該系統通過其獨特的功能和優勢,為航空航天企業帶來了顯著的管理效益和市場競爭力提升。 彩虹PLM系統 在應用方面,彩…

這樣解釋 TCP_IP 真的很好理解

想象一下,你住在一個大城市里,這個城市就是你的計算機網絡世界。在這個城市中,有許多房子(代表不同的計算機),這些房子之間由各種道路和交通設施連接起來(代表網絡的物理連接)。 現在…

1.2 離散LTI系統的時域分析

目錄 離散系統的定義 離散LTI系統的時域描述h[k] 離散系統的分類 線性與非線性系統 時變與非時變系統 因果與非因果系統 穩定與不穩定系統 滑動平均系統 LTI——Linear and Time-invariant System 線性時不變系統 離散系統的定義 離散LTI系統的時域描述h[k] 離…

【java12】java12新特性之File的mismatch方法

Java12引入了一個新的方法 mismatch,它屬于java.nio.file.Files類。此方法用于比較兩個文件的內容,并返回第一個不匹配字節的位置。如果兩個文件完全相同,則返回-1。 Files.mismatch 方法聲明 public static long mismatch(Path path1, Pat…

【并發編程】2-Synchronized

基本概念 線程安全問題三個要素:多線程、共享資源、非原子性操作;產生的根本原因:多條線程同時對一個共享資源進行非原子性操作;Synchronized解決線程安全問題的方式:通過互斥鎖將多線程的并行執行變為單線程串行執行…

昇思25天學習打卡營第4天|數據集Dataset

數據集 Dataset 介紹 之前說過,MindSpore是基于Pipeline,通過Dataset和Transformer進行數據處理。Dataset在其中是用來加載原始數據的。mindSpore提供了數據集加載接口,可以加載文本、圖像、音頻等,同時也可以自定義加載接口。此…

【UE開發】游戲庫存UI系統Demo

1.項目介紹 1.描述:一種用于存儲記錄玩家物品的游戲內可視化操作系統。 2.演示:https://www.bilibili.com/video/BV1f53neVEfW/?vd_source50dea901fd12253f417c48b937975b0d 3.大綱: 4.樣式: 2.W_Inventory_Main_01(…

CORE Mobility Errorr的調試

在運行CORE tutorial 3中的mobility示例時,出現如下錯誤: 當看到這個問題的時候,并沒有仔細去分析日志和現象,在core-daemon的進程打印界面只看了一下最后的出錯堆棧: 2024-06-27 10:43:48,614 - ERROR - _server:_ca…

MySQL8 新特性——公用表表達式用法 with t1 as (select * from user)

MySQL8 新特性——公用表表達式用法_mysql ctes-CSDN博客 1.普通公用表表達式 MySQL8 新特性——公用表表達式用法 在MySQL 8.0及更高版本中,引入了公用表表達式(Common Table Expressions,CTEs),它是一種方便且可重…