近日在做項目時,意外聽說有一種SQLite的數據庫,相比自己之前使用的SQL Service甚是輕便,在對數據完整性、並發性要求不高的場景下可以嘗試!
1、SQLite簡介:
SQLite是一個進程內的庫,實現了自給自足的、無服務器的、零配置的、事務性的 SQL 數據庫引擎。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它(如安卓系統),它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Python、C#、PHP、Java等,還有ODBC接口。
SQLite引擎不是一個“程序與之通信”的獨立進程,而是連接到程序中成為它的一個主要部分。所以主要的通信協議是在編程語言內的直接API調用。這在消耗總量、延遲時間和整體簡單性上有積極的作用。整個數據庫(定義、表、索引和數據本身)都在宿主主機上存儲在一個單一的文件中。它的簡單的設計是通過在開始一個事務的時候鎖定整個數據文件而完成的。
2、SQLite文件管理:
SQLite文件的后綴是.db,可以使用SQLite 數據庫的管理工具查看其內容,比如SQLiteStudio是一款 Sqlite數據庫可視化工具,是使用Sqlite數據庫開發應用的必備軟件,軟件無需安裝,下載后解壓即可使用。
下圖是一個簡單的工程示例,ARPA數據保存在SQLite庫中,定義了一個ARPAInfo表,該表具有ID、Time和ARPA三個字段,其中數據Tab中可以看到存儲在文件中的數據,SQLite的嵌入式數據庫的易於使用性可以加快應用程序的開發,並使得小型應用程序能夠完全支持復雜的SQL,所以沒有必要使用文本文件來實現持久存儲。


3、Python讀取SQLite文件
SQLite3 可使用 sqlite3 模塊與 Python 進行集成。sqlite3 模塊是由 Gerhard Haring 編寫的。它提供了一個與 PEP 249 描述的 DB-API 2.0 規范兼容的 SQL 接口。您不需要單獨安裝該模塊,因為 Python 2.5.x 以上版本默認自帶了該模塊。為了使用 sqlite3 模塊,您首先必須創建一個表示數據庫的連接對象,然后您可以有選擇地創建光標對象,這將幫助您執行所有的 SQL 語句。
關於Python sqlite3 模塊 API的介紹,可以在以下鏈接查看。
http://www.runoob.com/sqlite/sqlite-python.html (中文)和 https://docs.python.org/2/library/sqlite3.html (英文)。
***********************************
代碼示例:
# -*- coding:utf8 -*- ''' Author:Wang Yanlong Date: 2017-08-16 All rights reserved. Distributed under the BSD license. References: https://docs.python.org/2/library/sqlite3.html (English) http://www.runoob.com/sqlite/sqlite-python.html (Chinese) ''' import sqlite3 as db # 從SQLite文件中讀取數據 def readFronSqllite(db_path,exectCmd): conn = db.connect(db_path) # 該 API 打開一個到 SQLite 數據庫文件 database 的鏈接,如果數據庫成功打開,則返回一個連接對象 cursor=conn.cursor() # 該例程創建一個 cursor,將在 Python 數據庫編程中用到。 conn.row_factory=db.Row # 可訪問列信息 cursor.execute(exectCmd) #該例程執行一個 SQL 語句 rows=cursor.fetchall() #該例程獲取查詢結果集中所有(剩余)的行,返回一個列表。當沒有可用的行時,則返回一個空的列表。 return rows #print(rows[0][2]) # 選擇某一列數據 # 解析ARPA 單幀信息 def readfromAppaFrame(ARPAFrame): subARPA=ARPAFrame.split(',') print(subARPA) if __name__=="__main__": rows=readFronSqllite('E://ARPA.db',"select ARPA from ARPAInfo") readLines=10010 lineIndex=10000 while lineIndex<readLines: row=rows[lineIndex] # 獲取某一行的數據,類型是tuple content="".join(row) #tuple轉字符串 readfromAppaFrame(content) # 解析ARPA數據 lineIndex+=1
***************************************
程序運行結果示例: