每日一模块: pickleDB

一、简介

如果你有需要将数据持久化保存,又不想直接操作文件,可以看看下面这些模块。最近几天将持续提供几个通过Python写的数据库模块,也可以考虑之前介绍的sqlite3。

每日一模块: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

(0)
土豆大侠的头像土豆大侠

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!