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 图片验证码代码分享
Jul 04 Python
python实现的简单猜数字游戏
Apr 04 Python
python各种语言间时间的转化实现代码
Mar 23 Python
Django 如何获取前端发送的头文件详解(推荐)
Aug 15 Python
python 重命名轴索引的方法
Nov 10 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
Dec 05 Python
python3人脸识别的两种方法
Apr 25 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
wxpython+pymysql实现用户登陆功能
Nov 19 Python
python实现监控阿里云账户余额功能
Dec 16 Python
python使用html2text库实现从HTML转markdown的方法详解
Feb 21 Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 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
其他功能
2006/10/09 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
广告显示判断
2006/08/31 Javascript
动态加载js文件 document.createElement
2006/10/14 Javascript
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
基于Python的PIL库学习详解
2019/05/10 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
写好自荐信的几个要点
2013/12/26 职场文书
大学生怎样写好自荐信
2014/02/25 职场文书
酒店管理毕业生自我鉴定
2014/03/02 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
回复函范文
2015/07/14 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书
作文之亲情600字
2019/09/23 职场文书