当前位置: 首页 > 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

相关文章:

  • 数据融合的经典模型:早期融合、中期融合与后期融合的对比
  • jira.issueviews
  • 0164__【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os
  • Unity3D仿星露谷物语开发25之创建时钟界面
  • GitHub Actions 使用需谨慎:深度剖析其痛点与替代方案
  • Spring 源码学习(七)——注解后处理器-2
  • 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 高可用