当前位置:首页 > 科技  > 软件

提高Python数据存储效率的利器:shelve和dbm的优势与应用!

来源: 责编: 时间:2023-12-01 17:15:42 408观看
导读作为常用的 python 自带数据库管理模块,shelve 和 dbm 都是非常方便的对象持久化存储和检索工具,并且这两个模块在使用上具有许多不同的特点。本文将从 shelve 和 dbm 的介绍、用法、优势以及不同点等方面进行详细阐述

作为常用的 python 自带数据库管理模块,shelve 和 dbm 都是非常方便的对象持久化存储和检索工具,并且这两个模块在使用上具有许多不同的特点。MTC28资讯网——每日最新资讯28at.com

本文将从 shelve 和 dbm 的介绍、用法、优势以及不同点等方面进行详细阐述和比较,希望能够帮助读者更好地理解和使用这两个数据库管理模块。MTC28资讯网——每日最新资讯28at.com

MTC28资讯网——每日最新资讯28at.com

一、shelve 和 dbm 的介绍

shelve 和 dbm 都是 python 自带的数据库管理模块,可以用于持久化存储和检索 python 中的对象。MTC28资讯网——每日最新资讯28at.com

虽然这两个模块的本质都是建立 key-value 对应关系的数据库,但 shelve 模块更像是 python 中的持久化字典。MTC28资讯网——每日最新资讯28at.com

支持存储 python 中的几乎所有对象(如整型、字符串、字典、列表等),并且具有一定的数据压缩功能。MTC28资讯网——每日最新资讯28at.com

而 dbm 则仅支持字符串类型的键和值,并且它们会以二进制文件的方式存储在硬盘上。MTC28资讯网——每日最新资讯28at.com

shelve 需要使用 pickle 模块对 python 对象进行序列化和反序列化,而 dbm 则直接使用字节序列进行存储。MTC28资讯网——每日最新资讯28at.com

因此,如果需要实现 python 对象的持久化存储和检索,建议使用 shelve;否则,如果采用 dbm 更为合适。MTC28资讯网——每日最新资讯28at.com

不仅如此,shelve 和 dbm 在使用上还存在许多区别,例如 shelve 具有锁支持。MTC28资讯网——每日最新资讯28at.com

而 dbm 不支持锁操作,这意味着在一些数据安全性较高的场景下,shelve 更为适合。MTC28资讯网——每日最新资讯28at.com

接下来,我们将重点介绍 shelve 和 dbm 的用法、优势以及不同点等方面。MTC28资讯网——每日最新资讯28at.com

1.shelve 的用法

使用 shelve 模块建立和打开数据库非常简单,我们只需要执行如下代码:MTC28资讯网——每日最新资讯28at.com

import shelvedb = shelve.open('mydata.db')

这里,我们建立了一个名字为 mydata.db 的数据库文件,并使用 shelve 模块中的 open() 方法建立了一个 shelve 对象 db。MTC28资讯网——每日最新资讯28at.com

此时,我们可以使用 python 字典的方式来存储和读取对象:MTC28资讯网——每日最新资讯28at.com

import shelvedb = shelve.open('mydata.db')db['key1'] = 'value1'db['key2'] = 2db['key3'] = {'name': 'Jack', 'age': 25}print(db['key1']) # 输出 value1print(db['key2']) # 输出 2print(db['key3']) # 输出 {'name': 'Jack', 'age': 25}

可以看到,我们成功地将不同类型的 python 对象存储到了 shelve 数据库中,并且通过相应的键名完成了对其的读取操作。MTC28资讯网——每日最新资讯28at.com

需要注意的是,在使用 shelve 存储自定义对象时,通过 setstate__() 和 __getstate() 方法来实现对象的序列化和反序列化。MTC28资讯网——每日最新资讯28at.com

shelve 对象也可以使用 python 的 with 语句进行上下文管理:MTC28资讯网——每日最新资讯28at.com

import shelvewith shelve.open('mydata.db') as db:    db['key4'] = {'name': 'Tom', 'age': 22}print(db['key4']) # 输出 KeyError: 'key4'

使用 with 语句可以确保在代码块结束时,shelve 对象会被关闭,并将其所包含的对象保存到硬盘上。MTC28资讯网——每日最新资讯28at.com

此时,需要注意的是,由于已经关闭了 shelve 对象,无法再直接使用 db 对象访问键值 key4。MTC28资讯网——每日最新资讯28at.com

最后,我们需要手动关闭 shelve 数据库:MTC28资讯网——每日最新资讯28at.com

import shelvedb = shelve.open('mydata.db')# 操作数据库db.close()

2.dbm 的用法

与 shelve 类似,使用 dbm 模块建立和打开数据库也非常简单:MTC28资讯网——每日最新资讯28at.com

import dbmdb = dbm.open('mydata.db', 'c')

这里,我们建立了一个名字为 mydata.db 的数据库文件,并使用 dbm 的 open() 方法建立了一个 dbm 对象 db。MTC28资讯网——每日最新资讯28at.com

需要注意的是,与 shelve 不同的是,dbm 只支持字符串类型的键和值,并且需要用字节串的形式作为键和值。MTC28资讯网——每日最新资讯28at.com

我们可以使用字节串来存储字符串:MTC28资讯网——每日最新资讯28at.com

import dbmdb = dbm.open('mydata.db', 'c')db[b'key1'] = b'value1'db[b'key2'] = b'value2'print(db[b'key1']) # 输出 value1print(db[b'key2']) # 输出 value2

需要注意的是,我们使用了字节串作为键和值,以便在存储和读取时使用。MTC28资讯网——每日最新资讯28at.com

如果要将 Unicode 字符串存储到 dbm 中,需要使用 encode() 方法将其编码为字节串,例如:MTC28资讯网——每日最新资讯28at.com

import dbmdb = dbm.open('mydata.db', 'c')db[b'key3'] = '这是一个字符串'.encode('utf-8')print(db[b'key3'].decode('utf-8')) # 输出 这是一个字符串

与 shelve 一样,dbm 对象也可以使用 python 的 with 语句进行上下文管理:MTC28资讯网——每日最新资讯28at.com

import dbmwith dbm.open('mydata.db', 'c') as db:    db[b'key4'] = b'value4'print(db[b'key4']) # 输出 KeyError: b'key4'

需要注意的是,在使用 with 语句时,db 对象也会在离开代码块时自动关闭。MTC28资讯网——每日最新资讯28at.com

最后,我们需要手动关闭 dbm 数据库:MTC28资讯网——每日最新资讯28at.com

import dbmdb = dbm.open('mydata.db', 'c')# 操作数据库db.close()

二、shelve 和 dbm 的优势

shelve 和 dbm 模块的优势在于它们非常方便,无需安装任何第三方库即可使用。MTC28资讯网——每日最新资讯28at.com

它们的 API 与 python 内置的类型非常相似,因此使用起来非常简单。MTC28资讯网——每日最新资讯28at.com

此外,它们对于小型数据存储和检索非常高效,并且具有跨平台的优势。MTC28资讯网——每日最新资讯28at.com

尽管这些特点不一定具有普适性,但在许多程序中都是优秀且合理的选择。MTC28资讯网——每日最新资讯28at.com

此外,shelve 模块具有数据压缩的功能,可以在一定程度上提高存储效率。MTC28资讯网——每日最新资讯28at.com

这是由于 shelve 会将 python 对象转换为字符串,并压缩这些字符串,从而减小数据文件的大小。MTC28资讯网——每日最新资讯28at.com

因此,如果需要长期存储比较多的数据,使用 shelve 可以使得磁盘占用量更小,并且可以加速数据存储和检索的速度。MTC28资讯网——每日最新资讯28at.com

三、shelve 和 dbm 的不同点

shelve 和 dbm 在使用上具有许多不同点。下面我们将重点讨论它们的几种不同之处。MTC28资讯网——每日最新资讯28at.com

1. 数据类型不同

最引人注目的是,shelve 和 dbm 支持的数据类型不同。MTC28资讯网——每日最新资讯28at.com

shelve 可以存储任意的 python 对象,包括列表、字典、元组、自定义对象等,而 dbm 仅支持字节串类型的键和值。MTC28资讯网——每日最新资讯28at.com

具体来说,对于数据类型的限制,shelve 要比 dbm 更小。MTC28资讯网——每日最新资讯28at.com

这取决于具体应用需求,但是如果需要存储 python 对象,则可以使用 shelve,否则可以使用 dbm。MTC28资讯网——每日最新资讯28at.com

2. 支持不同的锁

shelve 具有锁支持,这意味着它可以被多个进程或线程同时访问,可以有效避免并发冲突的情况。MTC28资讯网——每日最新资讯28at.com

相比之下,dbm 不支持锁操作,这意味着在访问 dbm 数据库时需要自己实现自己的锁逻辑,以确保并发访问的正确性。MTC28资讯网——每日最新资讯28at.com

3. 磁盘空间占用不同

尽管 shelve 和 dbm 都是将数据存储在硬盘上,但是占用的磁盘空间大小却有所不同。MTC28资讯网——每日最新资讯28at.com

通常情况下,shelve 会压缩数据并存储它们,因此在许多情况下,shelve 会占用更少的磁盘空间。MTC28资讯网——每日最新资讯28at.com

而 dbm 不需要进行压缩操作,因此当存储的数据量较小时,dbm 相对于 shelve 更为节省磁盘空间。MTC28资讯网——每日最新资讯28at.com

总结

在本文中,我们详细介绍了 shelve 和 dbm 两个 python 自带的数据库管理模块,包括它们的介绍、用法、优势以及不同点等。MTC28资讯网——每日最新资讯28at.com

虽然 shelve 和 dbm 的共同点是都能实现简单的持久化存储和检索功能。MTC28资讯网——每日最新资讯28at.com

但是这两个模块在存储和检索的数据类型、支持锁的程度以及磁盘空间占用等方面存在许多不同点。MTC28资讯网——每日最新资讯28at.com

在选择具体的模块时,需要结合实际情况来进行选择。MTC28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-35893-0.html提高Python数据存储效率的利器:shelve和dbm的优势与应用!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 如何在 matplotlib 中实现多子图布局?

下一篇: 使用IntelliJ IDEA高效进行Java代码分析和性能调优

标签:
  • 热门焦点
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein“利用市场支配力量强迫服装厂商与之签订独家
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 华为Mate60标准版细节曝光:经典星环相机模组回归

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
Top