python3使用sqlite3構(gòu)建本地持久化緩存的過程
環(huán)境:Windows 10_x64
python版本:3.9.2
sqlite3版本:3.34.0
日常python開發(fā)中會(huì)遇到數(shù)據(jù)持久化的問題,今天記錄下如何使用sqlite3進(jìn)行數(shù)據(jù)持久化,并提供示例代碼及數(shù)據(jù)查看工具。
一、背景描述
python應(yīng)用程序在運(yùn)行過程中被kill掉(比如版本升級(jí)等情況),內(nèi)存中的運(yùn)行數(shù)據(jù)將會(huì)丟失,如果能夠準(zhǔn)實(shí)時(shí)將數(shù)據(jù)存儲(chǔ)在緩存中,程序下次啟動(dòng)時(shí)將繼續(xù)執(zhí)行被kill之前的動(dòng)作。
使用數(shù)據(jù)庫作為持久化是筆記理想的選擇,可現(xiàn)實(shí)情況可能需要python腳本進(jìn)行本地持久化,相較于pickle等方式,sqlite3的持久化方式可擴(kuò)展性比較強(qiáng),方便后續(xù)遷移到mysql等數(shù)據(jù)庫。
二、具體實(shí)現(xiàn)
1、基礎(chǔ)使用示例
查看版本信息
import sqlite3 print(sqlite3.version_info) #顯示sqlite3版本信息 print(sqlite3.sqlite_version) #顯示SQLite版本信息
數(shù)據(jù)庫創(chuàng)建或連接
conn = sqlite3.connect("test1.db") cur = conn.cursor()
數(shù)據(jù)表創(chuàng)建
dbCreate = ''' CREATE TABLE user( user_id int, user_name text, password text ) ''' cur.executescript(dbCreate) conn.commit()
插入數(shù)據(jù)
conn.execute("INSERT INTO user (user_id,user_name,password) VALUES(1,'user1','123456')") conn.commit()
查詢數(shù)據(jù)
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 ) ''' # 創(chuàng)建或連接數(shù)據(jù)庫 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()
運(yùn)行效果:
生成的 test1.db 數(shù)據(jù)庫文件可以使用 sqlitestudio 進(jìn)行查看,軟件運(yùn)行效果如下:
下載地址:
如果下載過慢,可從如下文末提供的渠道獲取。
2、代碼封裝示例
實(shí)際使用過程中,需要進(jìn)行代碼封裝,以便后續(xù)使用,這里以通話記錄為例演示下封裝過程。
1)定義全局緩存 gDCdrData,用于在內(nèi)存中存放數(shù)據(jù);
2)定義全局隊(duì)列 gQCDR ,用于數(shù)據(jù)傳遞;
3)定義sqlite3持久化文件,并定義保留時(shí)長(zhǎng);
4)創(chuàng)建 ObjCdrItem 類,用于定義item數(shù)據(jù)結(jié)構(gòu);
5)定義sqlite3管理類 ObjCDRMgr,用于管理sqlite3數(shù)據(jù)庫;
6)啟動(dòng) dataGenThrd 線程模擬數(shù)據(jù)創(chuàng)建;
7)啟動(dòng) updateThrd 線程用于數(shù)據(jù)更新;
8)啟動(dòng) cleanThrd 線程用于數(shù)據(jù)清理;
示例代碼如下:
完整代碼可從如下鏈接獲?。?/p>
http://xiazai.jb51.net/202311/yuanma/sqlitestudio_jb51.rar
運(yùn)行效果如下:
數(shù)據(jù)文件打開效果如下:
三、資源下載
http://xiazai.jb51.net/202311/yuanma/sqlitestudio_jb51.rar
以上源碼免費(fèi)提供大家,感謝支持!
到此這篇關(guān)于python3使用sqlite3構(gòu)建本地持久化緩存的文章就介紹到這了,更多相關(guān)python3本地持久化緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中字典的緩存池
- Python中緩存lru_cache的基本介紹和講解
- Python 如何手動(dòng)編寫一個(gè)自己的LRU緩存裝飾器的方法實(shí)現(xiàn)
- 在Python 3中緩存Exception對(duì)象會(huì)造成什么后果?
- python編程實(shí)現(xiàn)清理微信重復(fù)緩存文件
- Python使用sqlite3第三方庫讀寫SQLite數(shù)據(jù)庫的方法步驟
- Python使用sqlite3模塊內(nèi)置數(shù)據(jù)庫
- python使用sqlite3時(shí)游標(biāo)使用方法
- Python使用flask框架操作sqlite3的兩種方式
- 讓Python更加充分的使用Sqlite3
相關(guān)文章
Python替換NumPy數(shù)組中大于某個(gè)值的所有元素實(shí)例
這篇文章主要介紹了Python替換NumPy數(shù)組中大于某個(gè)值的所有元素實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06Flask框架 CSRF 保護(hù)實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Flask框架 CSRF 保護(hù)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Flask-WTF針對(duì)CSRF攻擊的防護(hù)相關(guān)操作技巧,需要的朋友可以參考下2019-10-10Python實(shí)現(xiàn)并行抓取整站40萬條房?jī)r(jià)數(shù)據(jù)(可更換抓取城市)
本文主要是以房?jī)r(jià)網(wǎng)房?jī)r(jià)信息爬蟲為例,對(duì)Python實(shí)現(xiàn)整站40萬條房?jī)r(jià)數(shù)據(jù)并行抓?。筛鼡Q抓取城市)的方法進(jìn)行分析介紹。需要的朋友一起來看下吧2016-12-12Python+Scipy實(shí)現(xiàn)自定義任意的概率分布
Scipy自帶了多種常見的分布,如正態(tài)分布、均勻分布、二項(xiàng)分布、多項(xiàng)分布、伽馬分布等等,還可以自定義任意的概率分布。本文將為大家介紹如何利用Scipy自定義任意的概率分布,感興趣的可以了解下2022-08-08Python 跨文件夾導(dǎo)入自定義包的實(shí)現(xiàn)
有時(shí)我們自己編寫一些模塊時(shí),跨文件夾調(diào)用會(huì)出現(xiàn)ModuleNotFoundError: No module named 'XXX',本文就來介紹一下解決方法,感興趣的可以了解一下2023-11-11python第三方模塊xmltodict庫優(yōu)雅處理xml格式為json
這篇文章主要為大家介紹了python第三方模塊xmltodict庫優(yōu)雅處理xml格式為json實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01關(guān)于Python字典(Dictionary)操作詳解
這篇文章主要介紹了關(guān)于Python字典(Dictionary)操作詳解,Python字典是另一種可變?nèi)萜髂P?,且可存?chǔ)任意類型對(duì)象,如字符串、數(shù)字、元組等其他容器模型,需要的朋友可以參考下2023-04-04