環境:Windows 10_x64
python版本:3.9.2
sqlite3版本:3.34.0
日常python開發中會遇到資料持久化的問題,今天記錄下如何使用sqlite3進行資料持久化,並提供範例程式碼及資料檢視工具。
python應用程式在執行過程中被kill掉(比如版本升級等情況),記憶體中的執行資料將會丟失,如果能夠準實時將資料儲存在快取中,程式下次啟動時將繼續執行被kill之前的動作。
使用資料庫作為持久化是筆記理想的選擇,可現實情況可能需要python指令碼進行本地持久化,相較於pickle等方式,sqlite3的持久化方式可延伸性比較強,方便後續遷移到mysql等資料庫。
檢視版本資訊
import sqlite3 print(sqlite3.version_info) #顯示sqlite3版本資訊 print(sqlite3.sqlite_version) #顯示SQLite版本資訊
資料庫建立或連線
conn = sqlite3.connect("test1.db") cur = conn.cursor()
資料表建立
dbCreate = ''' CREATE TABLE user( user_id int, user_name text, password text ) ''' cur.executescript(dbCreate) conn.commit()
插入資料
conn.execute("INSERT INTO user (user_id,user_name,password) VALUES(1,'user1','123456')") conn.commit()
查詢資料
cursor = conn.execute("SELECT * FROM user") for row in cursor.fetchall(): print(row)
完整範例程式碼如下:
#! /usr/bin/env python3 #--*-- ebcoding:utf-8 --*-- import sqlite3 dbCreate = ''' CREATE TABLE user( user_id int, user_name text, password text ) ''' # 建立或連線資料庫 conn = sqlite3.connect("test1.db") cur = conn.cursor() cur.executescript(dbCreate) conn.commit() conn.execute("INSERT INTO user (user_id,user_name,password) VALUES(1,'user1','123456')") conn.execute("INSERT INTO user (user_id,user_name,password) VALUES(2,'user2','123457')") conn.commit() cursor = conn.execute("SELECT * FROM user") for row in cursor.fetchall(): print(row) conn.close()
執行效果:
生成的 test1.db 資料庫檔案可以使用 sqlitestudio 進行檢視,軟體執行效果如下:
下載地址:
https://sqlitestudio.pl/
如果下載過慢,可從如下文末提供的渠道獲取。
實際使用過程中,需要進行程式碼封裝,以便後續使用,這裡以通話記錄為例演示下封裝過程。
1)定義全域性快取 gDCdrData,用於在記憶體中存放資料;
2)定義全域性佇列 gQCDR ,用於資料傳遞;
3)定義sqlite3持久化檔案,並定義保留時長;
4)建立 ObjCdrItem 類,用於定義item資料結構;
5)定義sqlite3管理類 ObjCDRMgr,用於管理sqlite3資料庫;
6)啟動 dataGenThrd 執行緒模擬資料建立;
7)啟動 updateThrd 執行緒用於資料更新;
8)啟動 cleanThrd 執行緒用於資料清理;
範例程式碼如下:
完整程式碼可從如下渠道獲取:
執行效果如下:
資料檔案開啟效果如下:
本文涉及檔案和範例程式碼從如下途徑獲取:
好,就這麼多了,希望對你有幫助。