Python工具箱系列(二十)

来源:https://www.cnblogs.com/shanxihualu/archive/2022/12/13/16979298.html
-Advertisement-
Play Games

資料庫操作應是所有合格程式員的基本功,寫的一手好SQL對於數據分析師而言更是安身立命之本。大部分軟體開發人員使用的資料庫都是MySql/MariaDB,畢竟LAMP(linux+apache+mysql+php)曾經風靡一時。但開發人員真正的瑞士小軍刀卻是SQLite,它是世界上裝機量第一的嵌入式數... ...


資料庫操作應是所有合格程式員的基本功,寫的一手好SQL對於數據分析師而言更是安身立命之本。大部分軟體開發人員使用的資料庫都是MySql/MariaDB,畢竟LAMP(linux+apache+mysql+php)曾經風靡一時。但開發人員真正的瑞士小軍刀卻是SQLite,它是世界上裝機量第一的嵌入式資料庫。

SQLite最初的構思是在一條軍艦上進行的。當時在通用動力工作的SQLite的作者D.RichardHipp正在為美國海軍編製一種在導彈驅逐艦上使用的程式。那個程式最初運行在HewlettPackard UNX(HPUX)上,後臺使用Infomix資料庫。對那個具體應用而言Informix有點兒太強大了。一個有經驗的資料庫管理員安裝或升級Informix可能需要一整天。其實這個應用需要的只是一個自我包含的資料庫,它易使用並能由程式控制。2000年1月Hipp開始和一個同事討論關於創建一個簡單的嵌入式SQL資料庫的想法。這個資料庫將使用C語言開發,同時這個資料庫將不需要安裝和管理支持。

◆2000年8月SQlite1.0發佈。Hipp用B-tree替換了gdbm。

◆2004年SQlite從2.0升級到3.0。這個版本重點強化了國際化。程式體積繼續保持240KB。

SQLite對標的不是MySQL、Oracle這類C/S結構資料庫,而是文件系統。這樣的場景基本都是對資料庫高級特性(擴展、併發、許可權)沒什麼需求時方便使用的。

經典的應用場景如下:

◆嵌入式資料庫,開箱即用,sqlite資料庫本身很小(windows下只有4Mb左右,主流linux都自帶sqlite)。

◆數據量不多的情況下,如果系統只幾萬甚至幾千條數據時,用sqlite是最適合的。

◆app中使用sqlite做緩存數據的存放,如登陸數據緩存,歷史數據緩存等。

 

從2000年5月29日開始,SQLite就選擇了C語言。直到今天,C也是實現SQLite這樣軟體庫的最佳語言。

主要原因包括:

性能。像SQLite這樣被密集使用的基礎庫需要有很好的性能,因為它對標於文件系統、甚至於記憶體操作,C語言很適合寫這樣有性能要求的程式。C語言有時被稱為「攜帶型彙編語言」,讓開發者能儘可能的接近底層硬體編碼,同時保證跨平臺的便攜性。當然,也有其他的編程語言聲稱和C一樣快或者更快,但沒有一個能和C一樣通用。

相容性。目前幾乎所有的系統都可以調用由C語言編寫的庫。

低依賴性。用C來編寫庫不會在運行時有太多的依賴。在最小的配置下,SQLite只需要C標準庫里屈指可數的幾個函數。

穩定性。這個穩定性是指語言的穩定性。C語言相對老舊但非常成熟可靠,但卻正好很適合開發像SQLite這樣更註重長期穩定的模塊。

SQLite安裝極為簡單:

linux:不用安裝,直接在命令行下輸入sqlite3即可使用。

windows:訪問SQlite官網,從Windows區下載預編譯的二進位文件。需要下載sqlite-tools-win32-*.zip、sqlite-dll-win32-*.zip壓縮文件。創建文件夾C:\sqlite,併在此文件夾下解壓上面兩個壓縮文件,將得到sqlite3.def、sqlite3.dll和sqlite3.exe文件。添加C:\sqlite到PATH環境變數,最後在命令提示符下,使用sqlite3命令即可。

SQlite的使用也非常簡單,直接使用命令進行相關的操作。

# 創建資料庫
sqlite3 demo.db
# 顯示資料庫
.database
# 創建表
create table demo_table(id int,name text);
# 插入數據
insert into demo_table values(1,"chen");
# 查詢
select * from demo_table;
# 退出
.quit

如果不喜歡使用命令行工具,也可以使用IDE工具。在VSCODE中,有專用的擴展支持如下圖所示,非常方便。

sqlite的不足包括:

◆不支持right join,當然left join是完全可以替代的。

◆視圖(view)、觸發器(trigger)功能受限。

◆事務處理能力受限(相較MySQL中的4種隔離級別而言)。

◆安全性不高,不具有MySQL中詳細的許可權管理功能,甚至sqlite數據文件的訪問無需用戶名密碼。

◆支持的數據類型較少。SQLite原生支持5中數據類型:NULL、INTEGER、REAL、TEXT、BLOB。在SQLite中,所有數據最終都轉化為該5中類型進行存儲。在SQLite中不支持BOOLEAN,在存儲時,會將false轉換為0,true轉換為1。同時SQLite不支持Date和Time數據類型,但是內置提供了一些時間操作函數,幫助用於轉換為其他數據類型進行存儲。

◆不建議基於網路的資料庫訪問。SQLite通常是內置在應用程式中的。如果數據和應用程式是分離的,則訪問數據就需要訪問網路。這樣也是可行的,但不是最優選擇。當數據和應用程式是分開在不同的物理設備上時,通常不選擇SQLite。

◆不建議高併發時使用。

◆不建議用於大資料庫的場景,畢竟超過150T,SQLite是無法承受的。

 

然而,儘管sqlite在功能完整性方面並不足以與其他關係型資料庫相媲美,但考慮其拿來即用的特點,不失為程式員開發中的瑞士軍刀。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 微服務作為雲原生時代下一種開發軟體的架構和組織方法,通過將明確定義的功能分成更小的服務,並讓每個服務獨立迭代,增加了應用程式的靈活性,允許開發者根據需要更輕鬆地更改部分應用程式。同時每個微服務可以由單獨的團隊進行管理,使用適當的語言編寫,並根據需要進行獨立擴縮容。但微服務同樣也並非“銀彈”,在帶來如... ...
  • keepalived + nginx 實現高可用 本篇主要介紹一下 keepalived + nginx 來實現 對於nginx的高可用, 還是簡單的主備模式 1.概述 前面有瞭解keepalived 的主備的基本使用, 但是那種是針對宕機等情況 停止了keepalived 的進程實現的 vip的漂 ...
  • 這次設計一個多位元組(8-256位)且波特率可更改(通過修改例化模塊的參數)的串口發送模塊。 1、狀態機的設定 狀態機的設定有空閑、發送、和數據移位三個狀態,其中空閑狀態為等待多位元組發送的信號; 發送狀態為給8位串口發送模塊傳輸待發送8位的數據同時判斷是否發送完數據回到空閑狀態; 數據移位狀態為等到前 ...
  • 傢具網購項目說明 1.項目前置技術 Java基礎 正則表達式 Mysql JDBC 資料庫連接池技術 滿漢樓項目(包括框架圖) JavaWeb 2.相關說明 這裡先使用原生的servlet/過濾器,後臺是經典的分層結構WEB-Service-DAO-Entity 在學習SSM時,我們使用SSM框架( ...
  • 哈嘍兄弟們 在大家的日常python程式的編寫過程中,都會有自己解決某個問題的解決辦法,或者是在程式的調試過程中,用來幫助調試的程式公式。 小編通過幾十萬行代碼的總結處理,總結出了22個python萬用公式,可以幫助大家解決在日常的python編程中遇到的大多數問題,一起來看看吧。 1、一次性進行多 ...
  • PDF文檔是我們日常辦公中使用最頻繁的文檔格式。但因為大多數PDF文檔都包含很多頁面圖像或大量圖片,這就導致PDF文檔過大,處理起來較為麻煩。PDF文件過大,就會導致傳輸或者下載的速度變慢,也會增加傳輸失敗的風險,影響辦公效率。因此我們需要對PDF文檔進行壓縮。本文將從以下兩方面介紹如何通過Java... ...
  • C++11多線程類庫中提供了 include包含了很多原子類型 原子操作 若幹彙編指令具有讀-修改-寫類型,也就是說它們訪問存儲器單元兩次,第一次讀原值,第二次寫新值 假定運行在兩個cpu上的兩個內核控制路徑試圖通過執行非原子操作來同時讀-修改-寫同一個存儲器。 首先兩個cpu都試圖讀同一單元,然後 ...
  • 1、前期準備 1.申請微信公眾號測試號及微信模板配置 2.申請一個微信公眾號測試號。測試號申請:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 3.掃碼登陸註冊,註冊成功後就會生成微信公號的appID和appsecret ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...