Python3标准库之dbm UNIX键-值数据库问题


Posted in Python onMarch 24, 2020

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。

总结

到此这篇关于Python3标准库之dbm UNIX键-值数据库的文章就介绍到这了,更多相关python 标准库dbm UNIX键值数据库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python读取浮点数和读取文本文件示例
May 06 Python
Python计算程序运行时间的方法
Dec 13 Python
python监控网站运行异常并发送邮件的方法
Mar 13 Python
Python基于scrapy采集数据时使用代理服务器的方法
Apr 16 Python
在Django框架中设置语言偏好的教程
Jul 27 Python
基于Django filter中用contains和icontains的区别(详解)
Dec 12 Python
python使用Matplotlib画饼图
Sep 25 Python
python将处理好的图像保存到指定目录下的方法
Jan 10 Python
python实现知乎高颜值图片爬取
Aug 12 Python
python 动态调用函数实例解析
Oct 21 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
Python configparser模块操作代码实例
Jun 08 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 #Python
python实现批量修改文件名
Mar 23 #Python
Python3 filecmp模块测试比较文件原理解析
Mar 23 #Python
python实现遍历文件夹图片并重命名
Mar 23 #Python
Python3 mmap内存映射文件示例解析
Mar 23 #Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 #Python
python实现横向拼接图片
Mar 23 #Python
You might like
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
PDO::errorCode讲解
2019/01/28 PHP
Js注册协议倒计时的小例子
2013/06/24 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
Django对接支付宝实现支付宝充值金币功能示例
2019/12/17 Python
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
好家长事迹材料
2014/01/23 职场文书
经营理念口号
2014/06/21 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
法定代表人身份证明书
2015/06/18 职场文书
六一亲子活动感想
2015/08/07 职场文书
搞笑欢迎词大全
2015/09/30 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏