python3使用sqlite3构建本地持久化缓存
环境:Windows 10_x64
python版本:3.9.2
sqlite3版本:3.34.0
日常python开发中会遇到数据持久化的问题,今天记录下如何使用sqlite3进行数据持久化,并提供示例代码及数据查看工具。
一、背景描述
python应用程序在运行过程中被kill掉(比如版本升级等情况),内存中的运行数据将会丢失,如果能够准实时将数据存储在缓存中,程序下次启动时将继续执行被kill之前的动作。
使用数据库作为持久化是笔记理想的选择,可现实情况可能需要python脚本进行本地持久化,相较于pickle等方式,sqlite3的持久化方式可扩展性比较强,方便后续迁移到mysql等数据库。
二、具体实现
1、基础使用示例
查看版本信息
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/
如果下载过慢,可从如下文末提供的渠道获取。
2、代码封装示例
实际使用过程中,需要进行代码封装,以便后续使用,这里以通话记录为例演示下封装过程。
1)定义全局缓存 gDCdrData,用于在内存中存放数据;
2)定义全局队列 gQCDR ,用于数据传递;
3)定义sqlite3持久化文件,并定义保留时长;
4)创建 ObjCdrItem 类,用于定义item数据结构;
5)定义sqlite3管理类 ObjCDRMgr,用于管理sqlite3数据库;
6)启动 dataGenThrd 线程模拟数据创建;
7)启动 updateThrd 线程用于数据更新;
8)启动 cleanThrd 线程用于数据清理;
示例代码如下:

完整代码可从如下渠道获取:
运行效果如下:

数据文件打开效果如下:

三、资源下载
本文涉及文件和示例代码从如下途径获取:

好,就这么多了,希望对你有帮助。
python3使用sqlite3构建本地持久化缓存的更多相关文章
- 使用Guava cache构建本地缓存
前言 最近在一个项目中需要用到本地缓存,在网上调研后,发现谷歌的Guva提供的cache模块非常的不错.简单易上手的api:灵活强大的功能,再加上谷歌这块金字招牌,让我毫不犹豫的选择了它.仅以此博客记 ...
- React全家桶构建一款Web音乐App实战(六):排行榜及歌曲本地持久化
上一节使用Redux管理歌曲相关数据,实现核心播放功能,播放功能是本项目最复杂的一个功能,涉及各个组件之间的数据交互,播放逻辑控制.这一节继续开发排行榜列表和排行榜详情,以及把播放歌曲和播放歌曲列表的 ...
- IOS开发-本地持久化存储sqlite应用
前言 需求描述 开发测试环境 FMDB介绍 创建工程 一.前言 上一章介绍了如何开发一个IOS应用的入门案例教程: 我的第一个IOS开发应用 本章主要将介 ...
- iOS应用架构谈 本地持久化方案及动态部署
转载: iOS应用架构谈 本地持久化方案及动态部署 前言 嗯,你们要的大招.跟着这篇文章一起也发布了CTPersistance和CTJSBridge这两个库,希望大家在实际使用的时候如果遇到问题,就给 ...
- ssiOS应用架构谈 本地持久化方案及动态部署
本文转载至 http://casatwy.com/iosying-yong-jia-gou-tan-ben-di-chi-jiu-hua-fang-an-ji-dong-tai-bu-shu.html ...
- 微信小程序开发:学习笔记[9]——本地数据缓存
微信小程序开发:学习笔记[9]——本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...
- 用 webpack 实现持久化缓存
什么是持久化缓存? 原文链接https://sebastianblade.com/using-webpack-to-achieve-long-term-cache/ 缓存(cache)一直是前端性能优 ...
- webpack5持久化缓存
Opt-in webpack 旨在注重构建安全而非性能.我们没有打算默认启用这一功能,主要原因在于此功能虽然有 95% 几率提升性能,但仍有 5% 的几率中断你的应用程序/工作流/构建. 什么是缓存失 ...
- 四、NOSQL之Redis持久化缓存服务基础实战第三部
1.NOSQL的理解 NOSQL是不仅仅是SQL,说的就是sql的补充,但是不能替代SQL. nosql库:memcached.memcachedb.redis 2.redis 简介 Redis是一个 ...
- 使用createrepo构建本地yum仓库
rpm包安装的时候会有很多软件会出现因为其他依赖包没有,而导致安装失败的情况.一般可以连接外网的时候我们直接使用 yum 进行安装,可以为我们解决依赖包关系,但是很多工作环境下是没有外网的,内网情况下 ...
随机推荐
- 2023郑州轻工业大学校赛邀请赛wh
在这里,很感谢程立老师的帮助和选择我,我以后会跟着程老师,既然热爱,就要走下去! 2022年4月2号,我代表河南工业大学与郑州17所高校在郑州轻工业大学举办的"卓见杯"郑州轻工业大 ...
- 基于LLVM的海量数据排序算法研究。(二维表的排序算法)
当待排序数据内容大于内存容量时,需将待排序内容分块,要进行排序的分块传入内存,未处于排序状态的存入外存,外存的读写时间是内存的百万倍,因此在内外存储器之间传输分块所消耗的 I/O 时间是大数据排序算法 ...
- 为什么Python是数据科学家的首选语言
这篇文章全面探讨了Python作为数据科学领域首选语言的原因.从Python的历史.特性,到在数据科学中的应用实例,再到与其他数据科学语言的比较,以及在实际企业中的应用,我们深入剖析了Python的优 ...
- CMDB 相关
CMDB 术语 CI(配置项) 配置管理解决方案(如CMDB)中的基本有形或无形实体. 为了交付IT服务而需要管理的任何组件. 通常包括IT服务.硬件.软件.架构.人员和正式文档(如流程文档和sla) ...
- python数据处理:获取Dataframe中的一列或一行
解决方案 df['w'] #选择表格中的'w'列,使用类字典属性,返回的是Series类型 df.w #选择表格中的'w'列,使用点属性,返回的是Series类型 df[['w']] #选择表格中的' ...
- 学习OI两年我到底收获了什么
做一个小小的总结 学习了两年的代码,刚刚要进入高中,留下一点文字给以前的学习做一个总结. 命中注定の邂逅-- 这两年之间,和编程产生了比学习更为低调的羁绊关系(我觉得用这个词语比较合适).编程给我带来 ...
- 线上问题排查--进程重启失败,最后发现是忘了cd
背景 我前面写了几篇文章,讲c3p0数据库连接池发生了连接泄露,但是随机出现,难以确定根因,最终呢,为了快速解决问题,我是先写了个shell脚本,脚本主要是检测服务的接口访问日志,看看过去的30s内是 ...
- 更快的训练和推理: 对比 Habana Gaudi®2 和英伟达 A100 80GB
通过本文,你将学习如何使用 Habana Gaudi2 加速模型训练和推理,以及如何使用 Optimum Habana 训练更大的模型.然后,我们展示了几个基准测例,包括 BERT 预训练.Stabl ...
- [jmeter]简介与安装
简介 JMeter是开源软件Apache基金会下的一个性能测试工具,用来测试部署在服务器端的应用程序的性能. 安装 安装jmeter 从 官网 下载jmeter的压缩包 安装jdk并配置 JAVA_H ...
- Redis从入门到放弃(10):分布式锁
在分布式系统中,实现对共享资源的安全访问是一个关键问题.Redis作为一种高性能的内存数据库,提供了多种方式来实现分布式锁,以解决多个节点之间对共享资源的并发访问问题. 本文将介绍五种Redis分布式 ...