Python3标准库之dbm UNIX键-值数据库问题
作者:@小灰灰 发布时间:2024-01-26 15:56:11
1. dbm UNIX键-值数据库
dbm是面向DBM数据库的一个前端,DBM数据库使用简单的字符串值作为键来访问包含字符串的记录。dbm使用whichdb()标识数据库,然后用适当的模块打开这些数据库。dbm还被用作shelve的一个后端,shelve使用pickle将对象存储在一个DBM数据库中。
1.1 数据库类型
Python提供了很多模块来访问DBM数据库。具体选择的默认实现取决于当前系统上可用的库以及编译Python时使用的选项。特定实现有单独的接口,这使得Python程序可以与用其他语言编写的程序(这些语言可能不会在可用格式之间自动切换)交换数据,并且可以写适用于多个平台的可移植的数据文件。
1.1.1 dbm.gnu
dbm.gnu是GNU项目dbm库版本的一个接口。它的工作方式与这里介绍的其他DBM实现系统相同,只是open()支持的标志有些不同。
除了标准'r'、'w'、'c'和'n'标志,dbm.gnu.open()还支持一下标志:
'f'以快速(fast)模式打开数据库。在快速模式下,对数据库的写并不同步。
's'以同步(synchronized)模式打开数据库。对数据库做出修改时,这些改变要直接写至文件,而不是延迟到数据库关闭或显式同步时才写至文件。
'u'以不加锁(unlocked)的状态打开数据库。
1.1.2 dbm.ndbm
dbm.ndbm模块为dbm格式的UNIX ndbm实现提供了一个接口,依赖于编译时这个模块如何配置。模块属性library指示编译扩展模块时configure能找到库名。
1.1.3 dbm.dumb
dbm.dumb模块是没有其他实现可用时DBM API的一个可移植的后备实现。使用dbm.dumb模块不需要依赖任何外部库,但它的速度比大多数其他实现都慢。
1.2 创建一个新数据库
通过按顺序查找以下各个子模块的可用版本来选择新数据库的存储格式。
dbm.gnu
dbm.ndbm
dbm.dumb
open()函数接收flags来控制如何管理数据库文件。如果要在必要时创建一个新的数据库,则可以使用'c'。使用'n'则总会创建一个新数据库,并覆盖现有的文件。
import dbm
with dbm.open('example.db', 'n') as db:
db['key'] = 'value'
db['today'] = 'Sunday'
db['author'] = 'Doug'
在这个例子中,文件总会重新初始化。
whichdb()会报告所创建数据库的类型。
import dbm
print(dbm.whichdb('example.db'))
取决于系统上安装的模块,示例程序的输出可能有所不同。
1.3 打开一个现有数据库
要打开一个现有数据库,可以使用flags 'r'(只读)或'w' (读写)。会自动将现有的数据库提供给whichdb()来识别,所以只要一个文件可以识别,便能使用一个适当的模块打开这个文件。
import dbm
with dbm.open('example.db', 'r') as db:
print('keys():', db.keys())
for k in db.keys():
print('iterating:', k, db[k])
print('db["author"] =', db['author'])
一旦打开,则db是一个类字典的对象。增加到数据库时,新建总是被转换为字节串,并且作为字节串返回。
1.4 错误情况
数据库的键必须是字符串。
import dbm
with dbm.open('example.db', 'w') as db:
try:
db[1] = 'one'
except TypeError as err:
print(err)
如果传入其他类型则会导致一个TypeError。
值必须是字符串或None。
import dbm
with dbm.open('example.db', 'w') as db:
try:
db['one'] = 1
except TypeError as err:
print(err)
如果值不是一个字符串,则会产生一个类似的TypeError。
来源:https://www.cnblogs.com/liuhui0308/archive/2020/03/24/12514222.html


猜你喜欢
- 1.如果没有采用响应式布局,指定表格的宽度即可解决比如table{ width:1400px !important;}2.如果采用了响应式布
- 本文参考文章,出于学习目的,写本文。开发项目时,为了维护一些经常需要变更的数据,比如数据库的连接信息、请求的url、测试数据等,需要将这些数
- javascript:单行注释用//呵呵呵呵;多行注释用/*hdhdhdh*/javascript中区别大小写,定义变量使用关键字var,语
- mysql 8.0.28版本安装配置方法图文教程,供大家参考,具体内容如下从 Mysql 官网下载 mysql 或直接点击这里下载下载完成后
- 这篇文章不谈大道理,只谈细节。关于facebook的大道理,大家可以去海内网的帖子《谁去救救麦田老师吧》讨论。那里有很多IT评论高手,谈的很
- 安装request库以火车的站站查询为例的post和get方法的接口测试使用pytest测试接口1、requests的请求机制1、安装req
- 本文实例讲述了MySQL 的启动选项和系统变量。分享给大家供大家参考,具体如下:MySQL的配置信息可以通过两种方式实现,一种是命令行形式,
- 例子:(简 > 繁)面包 > 麵包 (zh-tw)寮国 > 老撾 (zh-hk)中国人寿 > 中國人壽 (zh-hk
- 创建RandomWalk类为模拟随机漫步,我们将创建一个RandomWalk类,随机选择前进方向,这个类有三个属性,一个存储随机漫步的次数,
- 数据类型:float — 浮点数可以精确到小数点后面15位int — 整型可以无限 * ool — 非零为true,零为falselist —
- 如下代码会将npy的格式数据读出,并且输出来到控制台:import numpy as np##设置全部数据,不输出省略号 import sy
- 前言因为写好了测试xmind脑图后,然后再编写测试用例,实在是太麻烦了,所以我写了一点测试用例后,就网上百度了下,怎么直接把xmind脑图转
- 数据库引擎以InnoDB为主1.磁盘碎片是什么InnoDB表的数据存储在页中,每个页可以存放多条记录,这些记录以树形结构组织,这棵树称为B+
- 前言python 可以做网站应用,也可以做客户端应用。但是客户端应用需要运行 py 脚本,如果用户不懂 python 就是一件比较麻烦的事情
- 最近开发项目中又重新拿起了Mysql,在搭建环境的时候遇到了中文乱码问题。下面我把我的解决方式跟大家分享一下 1、通过show VARIAB
- 在 Facebook 上有一个彩蛋:登录 facebook.com ,点击你首页的任何地方,键盘输入 Up, Up, Down, Down,
- 本文实例为大家分享了python如何实现视频转代码视频的具体代码,供大家参考,具体内容如下# -*- coding:utf-8 -*-#co
- 在之前的几篇文章中,介绍了业界中比较火爆的图片技术SVG(Scalable Vector Graphics),比如Iconfont(矢量图标
- 语法格式:row_number() over(partition by 分组列 order by 排序列 desc)row_num
- 一、闭包1. 什么是闭包?在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生 闭包。闭包可以用来在一个函