当前位置: 首页 > article >正文

轻量数据持久化 shelve | sqlite3

轻量数据持久化

shelve

shelve — Python 对象持久化 — Python 3.13.0 文档

键值对象持久化, 会生成 user.bak, user.dir, user.dat 三个文件以持久化数据

不过并不支持并发写入, 但是可以并发读取

import shelve

# 打开一个数据存储文件,
with shelve.open('user') as db:
    db['username'] = 'tiam'
    db['password'] = '123456'
    print(dict(db))  # {'password': '123456', 'username': 'tiam'}

应用场景demo

import shelve
import time


def process_data(data):
    time.sleep(1)
    print(data)


def main():
    used = shelve.open('used')
    # 假设这里有一个很长的列表耗时任务需要处理(可能中途程序会中断),
    # 避免下次重复处理, 使用shelve记录已处理的数据
    for asc in range(65, 91):
        c = chr(asc)
        # 如果已经处理过, 则跳过
        if c in used:
            continue
        try:
            process_data(c)
            print(f"Process {c} done")
            used[c] = True  # 标记已被使用
        except Exception as e:
            print(f"Process {c} failed")
        except KeyboardInterrupt:
            print("KeyboardInterrupt detected")
            break
    # 关闭shelve
    used.close()


if __name__ == '__main__':
    main()

sqlite3

官网: SQLite Home Page

介绍: SQLite 是一个C语言库,它可以提供一种轻量级的基于磁盘的数据库,这种数据库不需要独立的服务器进程,也允许需要使用一种非标准的 SQL 查询语言来访问它。

它并不需要像mysql, mongodb等数据库一样要使用地址端口去连接服务器进程使用; 它使用本地文件作为数据库持久化, 所以并不需要安装什么, 可以直接使用.

文档: sqlite3 — SQLite 数据库的 DB-API 2.0 接口 — Python 3.13.0 文档

简单的使用, 主要还是要会SQL语法

import sqlite3

conn = sqlite3.connect('demo.db')
cursor = conn.cursor()

# 执行sql语句建表
# cursor.execute("CREATE TABLE user(id, username, password)")

users = [(i, 'admin', '123456') for i in range(5)]
# 单条插入
# for user in users:
#     cursor.execute('INSERT INTO user(id, username, password) VALUES (?, ?,  ?)', user)

# 批量插入
cursor.executemany('INSERT INTO user(id, username, password) VALUES (?, ?,  ?)', users)
conn.commit()

# 查询记录
res = cursor.execute("SELECT * FROM user")
for row in res.fetchall():
    print(row)

conn.close()

http://www.kler.cn/a/378211.html

相关文章:

  • LangChain教程 - 创建 ReAct 风格智能代理
  • qt QMenuBar详解
  • IDC报告解读:实用型靶场将成为下一代网络靶场的必然方向
  • VS code SSH设置多个远程连接免登录
  • 缓存、注解、分页
  • 【运动的&足球】足球运动员球守门员裁判检测系统源码&数据集全套:改进yolo11-DBBNCSPELAN
  • AI风险及数据合规问题
  • js 期约到底是什么?
  • Ubuntu 系统Python环境管理(全、简)
  • Java项目实战II基于Spring Boot的文理医院预约挂号系统的设计与实现(开发文档+数据库+源码)
  • 全球首个国家级别的数据库CAB又在上海召开了!
  • C++之多态的深度剖析(2)
  • 砥砺十年风雨路,向新而行创新程丨怿星科技十周年庆典回顾
  • 【MySQL】存储引擎
  • 基于深度学习的智能交通信号控制
  • uniapp编译多端项目App、小程序,input框键盘输入后
  • 半成品 贪吃蛇项目
  • Linux软硬链接
  • C++ 优先算法 —— 查找总价格为目标值的两个商品(双指针)
  • 八、MapReduce 大规模数据处理深度剖析与实战指南
  • 100种算法【Python版】第33篇——Tonelli-Shanks算法
  • vue+element上传图片
  • fmql之Linux以太网
  • chatgpt3.5权重参数有多少MB;llama7B权重参数有多少MB
  • ChatGPT 和 RAG(检索增强生成)的区别;ChatGPT 和 RAG 的联系
  • 【缓存与加速技术实践】Redis 高可用