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

你知道 Python 其实自带了小型数据库吗

来源: 责编: 时间:2023-11-01 17:04:33 220观看
导读dbmDBM(DataBase Manager)是一种文件系统,专门用于键值对的存储,最初是在 Unix 平台实现,现在其它平台也可以用。对于 KV 模型,DBM 提供了一个轻量级、高效的存储解决方案。总的来说,DBM 具有如下特点:简单快速:非常简单易用,读

dbm

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

DBM(DataBase Manager)是一种文件系统,专门用于键值对的存储,最初是在 Unix 平台实现,现在其它平台也可以用。对于 KV 模型,DBM 提供了一个轻量级、高效的存储解决方案。DT728资讯网——每日最新资讯28at.com

总的来说,DBM 具有如下特点:DT728资讯网——每日最新资讯28at.com

  • 简单快速:非常简单易用,读取和写入操作都很快,适合存储少量数据。
  • 键值对存储:数据是以键值对形式存储的,你可以像操作 Python 字典一样。
  • 文件存储:数据存在具体的文件中,可以轻松地备份和转移。
  • 不支持复杂查询:如果需要执行复杂查询或需要关系型数据库的功能,DBM 可能不是一个好选择。

而 Python 标准库提供了一个 dbm 模块,它实现了 DBM 文件系统的功能,来看一下它的用法。DT728资讯网——每日最新资讯28at.com

import dbm# 第一个参数是文件名# 第二个参数是模式,有以下几种#     r:只读,要求文件必须存在,默认就是这个模式#     w:可读可写,要求文件必须存在#     c:可读可写,文件不存在会创建,存在则追加#     n:可读可写,文件不存在会创建,存在则清空# 第三个参数是权限,用八进制数字表示,默认 0o666,即可读可写不可执行db = dbm.open("store", "c")# 打开文件就可以存储值了,key 和 value 必须是字符串或 bytes 对象db["name"] = "S せんせい"db["age"] = "18"db[b"corporation"] = "小摩".encode("utf-8")# 关闭文件,将内容写到磁盘上db.close()

非常简单,就像操作字典一样,并且 key 是唯一的,如果存在则替换。执行完后,当前目录会多出一个 store.db 文件。DT728资讯网——每日最新资讯28at.com

图片图片DT728资讯网——每日最新资讯28at.com

我们打开它,然后读取刚才写入的键值对。DT728资讯网——每日最新资讯28at.com

import dbmdb = dbm.open("store", "c")# 获取所有的 key,直接返回一个列表print(db.keys())"""[b'corporation', b'name', b'age']"""# 判断一个 key 是否存在,key 可以是字符串或 bytes 对象print("name" in db, "NAME" in db)"""True False"""# 获取一个 key 对应的 value,得到的是 bytes 对象print(db["name"].decode("utf-8"))print(db[b"corporation"].decode("utf-8"))"""S せんせい小摩"""# key 如果不存在,会抛出 KeyError,我们可以使用 get 方法print(db.get("NAME", b"unknown"))"""b'unknown'"""# 当然也可以使用 setdefault 方法,key 不存在时,自动写进去print(db.setdefault("gender", b"female"))"""b'female'"""print(db["gender"])"""b'female'"""

非常简单,当你需要存储的数据量不适合放在内存中,但又没必要引入数据库,那么不妨试试使用 dbm 模块吧。DT728资讯网——每日最新资讯28at.com

当然啦,dbm 虽然很方便,但它只能持久化 bytes 对象,字符串也是转成 bytes 对象之后再存储的。所以除了 dbm 之外,还有一个标准库模块 shelve,它可以持久化任意对象。DT728资讯网——每日最新资讯28at.com

shelve

shelve 的使用方式和 dbm 几乎是一致的,区别就是 shelve 的序列化能力要更强,当然速度自然也就慢一些。DT728资讯网——每日最新资讯28at.com

import shelve# 第二个参数表示模式,默认是 c# 因此文件不存在会创建,存在则追加sh = shelve.open("shelve")sh["name"] = ["S 老师", "高老师", "电烤 
                

本文链接:http://www.28at.com/showinfo-26-16369-0.html你知道 Python 其实自带了小型数据库吗

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

上一篇: Go语言中的闭包:封装数据与功能的强大工具

下一篇: 一文了解负载均衡器、反向代理、API 网关区别

标签:
  • 热门焦点
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月5日消息,据灯塔专业版数据,截至8月5日9时35分,8月总票房(含预售)已突破10亿。其中,《封神》以大比分的优势领先。根据官方消息,目前该片总票房已经超过14.
  • 一篇聊聊Go错误封装机制

    一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • .NET 程序的 GDI 句柄泄露的再反思

    .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 每天一道面试题-CPU伪共享

    每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    来源:直播观察提起“冯提莫”这个名字,很多网友或许听过,但应该不记得她是哪位主播了。其实,作为曾经的“斗鱼一姐”,冯提莫在游戏直播的年代影响力不输于现
  • 认真聊聊东方甄选:如何告别低垂的果实

    认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的“网红”。7月5日至9日,为期5天的东方甄选“甘肃行”首次在自有App内直播,
  • 回归OPPO两年,一加赢了销量,输了品牌

    回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • 电博会与软博会实现

    电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top