一、简介
如果你有需要将数据持久化保存,又不想直接操作文件,可以看看下面这些模块。最近几天将持续提供几个通过Python写的数据库模块,也可以考虑之前介绍的sqlite3。
pickleDB
是一个轻量级的 Python 数据库模块,它使用 pickle 序列化和文件来存储键值对。尽管它不如传统的关系型数据库强大,但 pickleDB
对于简单的数据存储需求来说非常有用,特别是当你需要跨 Python 会话持久化数据时。
二. 安装
使用 pip工具安装:
pip install pickledb
三. 导入模块并创建数据库
在你的 Python 脚本中,你需要导入 pickleDB
模块,并创建一个数据库实例:
import pickledb
# 创建一个 pickleDB 数据库实例,指定数据库文件名(如果不存在,则会创建)
db = pickledb.load('my_database.db', False)
注意,第二个参数(这里是 False
)是一个布尔值,用于指定是否在每次操作后自动保存数据库。如果你设置为 True
,则每次对数据库的修改都会立即写入磁盘,这可能会导致性能下降,但会确保数据的安全性。
四. 存储数据
支持字符串,整形,浮点数,列表,元组,字典,不支持集合
使用 set
方法来存储键值对:
db.set("city", "beijing")
db.dump()
print(db.get("city")) # beijing
db.set("city", "shanghai")
db.dump()
print(db.get("city")) # shanghai
# 如果重复设置相同key的的对象,会直接被最后一次设置时的value覆盖
使用append
方法来向已经存在的key里添加更多的内容,不会覆盖:
# 注意点:如果之前添加的key对应的value是什么数据类型,后面使用append添加新内容时就要使用什么数据类型,不然会报错
# 如果之前key的value为字符串: 会将新添加的值拼接在之前值得后面
db.set("name", "ZhangSan")
db.append("name", "NbPlus")
db.dump()
print(db.get("name")) # ZhangSanNbPlus
# 如果之前key的value为整数或小数:会与新添加的进行运算相加
db.set("age", 18.2)
db.append("age", 2)
db.dump()
print(db.get("age")) # 20.2
# 如果之前key的value为元组或列表: 会将新内容添加到之前的列表或元组中
db.set("hobby", ["eat", "sleep"])
db.append("hobby", ["Play peas"])
db.dump()
print(db.get("hobby")) # ['eat', 'sleep', 'Play peas']
db.set("travel", ("WuHan",))
db.append("travel", ("ZhengZhou",))
db.dump()
print(db.get("travel"))
# 如果之前key的value为字典: append不支持再添加,会报错
db.set("GreenPlants", {"name": "Wealth Tree", "age": 0.2})
db.append("GreenPlants", {"name1": "Wealth Tree1", "age1": 0.2})
db.dump()
print(db.get("GreenPlants")) # TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
五. 检索数据
使用 get
方法来检索存储的数据:
name = db.get('hobby') # 返回 ['eat', 'sleep', 'Play peas']
使用getall
方法获取数据库中所有键的列表:
keys = db.getall() # 返回 dict_keys(['GreenPlants', 'v', 'name', 'age', 'hobby', 'travel'])
六. 检查键是否存在
使用 exists
方法来检查特定的键是否存在:
if db.exists('name'):
print('The key "name" exists.')
七. 删除数据
使用 rem
方法来删除特定的键及其对应的值:
db.rem('age') # 删除键 'age' 及其对应的值
八. 保存和加载数据库
如果你在创建数据库实例时设置了自动保存为 False
,那么你需要手动调用 dump
方法来保存对数据库的修改:
db.dump() # 将对数据库的修改写入磁盘
如果你需要从一个已存在的数据库文件中加载数据,只需使用相同的文件名创建一个新的数据库实例即可:
db = pickledb.load('my_database.db', False) # 这将加载 'my_database.db' 文件中的数据
九. 关闭数据库
虽然 pickleDB
没有提供显式的关闭数据库的方法(因为它是基于文件的,并且文件句柄在 Python 中是自动管理的),但如果你在处理完数据库后想要确保所有修改都已保存,可以调用 dump
方法。
十. 删除数据库
使用deldb
方法删除指定的库
db = pickledb.load('my_database.db', False)
db.deldb()
print(db.getall()) # dict_keys([])
注意事项
-
•
pickleDB
不是为并发访问设计的,因此在多线程或多进程环境中使用时需要小心。 -
• 由于
pickleDB
使用 pickle 序列化数据,因此它不能用于存储非 Python 环境中可序列化的数据类型。 -
• 在选择使用
pickleDB
之前,请考虑你的具体需求。对于更复杂的数据存储和查询需求,可能需要使用更强大的数据库系统如之前的sqlite 或 mysql。
原文始发于微信公众号(Python小白养成记):每日一模块: pickleDB
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/288849.html