pickleDB 是什么玩意儿?pickleDB 本质上是个 纯 Python 实现的键值存储,底层直接把 Python 对象序列化成 pickle,写到磁盘。别看它代码只有几百行,却能把列表、字典、甚至自定义对象直接当作数据库的“记录”。如果你平时写脚本、爬虫、或者小型 web 项目,想要快速落地一个持久化层,pickleDB 完全可以直接上手,根本不需要学 SQL、Redis 命令。
它解决了哪些痛点?
- • 安装零门槛:
pip install pickledb,几秒搞定。 - • 学习成本极低:只要会 Python 基本数据结构,就能直接
db.set('key', value)、db.get('key')。 - • 读写速度惊人:内部用了
orjson(比标准库 json 快 5~10 倍),在几百万条记录的基准测试里,读取、写入都在秒级。 - • 原子保存:每次
db.dump() 都是原子写入,哪怕进程崩溃,文件也不会半写半截。
安装 & 上手
| | |
| pip install pickledb | |
| python\nimport pickledb\n db = pickledb.load('mydb.db', False) # 第2个参数是自动保存开关\n | |
| db.set('name', '小张') | |
| db.get('name') # => '小张' | |
| db.dump() | 手动保存;若打开自动保存,所有 set/rem 都会即时落盘 |
| db.rem('name') | |
常用 API 小结
| | |
set(key, value) | | db.set('age', 28) |
get(key, default=None) | | db.get('age') |
rem(key) | | db.rem('age') |
exists(key) | | db.exists('age') |
getall() | | db.getall() |
dump() | | db.dump() |
load(filename, auto_dump) | | pickledb.load('mydb.db', True) |
优点大放送
- • Pythonic:直接使用原生数据结构,无需记忆特殊语法。
- • 高速:依赖
orjson,序列化/反序列化快得飞起。 - • 异步支持:
AsyncPickleDB 搭配 aiofiles,在 FastAPI、Starlette 等框架里也能玩儿。
缺点别忽视
- • 全量加载到内存:启动时会把整个文件读进 RAM,数据量大(上百 MB 以上)时会吃掉不少内存。
- • 功能单一:不支持事务、索引、分布式等高级特性,复杂业务还是要考虑 Redis、SQLite、MongoDB。
- • 不适合作为生产级大规模缓存:毕竟是文件+内存的组合,扩展性受限。
性能一览(实测)
总结如果你只需要一个 轻量、易用、读写快 的本地键值库,pickleDB 完全可以满足需求。它特别适合原型开发、脚本工具、个人项目或小型 Web 服务。记住它的局限——内存占用和缺少高级特性——在项目规模扩大时,及时评估是否需要迁移到更成熟的数据库。总之,pickleDB 就是那种“装上即用、拔掉即走”的神器,省心又省事。
项目地址:https://github.com/patx/pickledb