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

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

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

dbm

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

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

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

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

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

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

我们打开它,然后读取刚才写入的键值对。zTK28资讯网——每日最新资讯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 模块吧。zTK28资讯网——每日最新资讯28at.com

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

shelve

shelve 的使用方式和 dbm 几乎是一致的,区别就是 shelve 的序列化能力要更强,当然速度自然也就慢一些。zTK28资讯网——每日最新资讯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 网关区别

标签:
  • 热门焦点
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事“起猛了,我能看得懂日语了”。“为什么日本人说话我能听懂?”“中文不像中文,日语不像日语,但是我竟然看懂了”…&hell
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
Top