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语言编写电脑时间自动同步小工具
Mar 08 Python
python操作MongoDB基础知识
Nov 01 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
Python实现的下载网页源码功能示例
Jun 13 Python
详解Python下载图片并保存本地的两种方式
May 15 Python
python matplotlib库绘制条形图练习题
Aug 10 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
python3.6生成器yield用法实例分析
Aug 23 Python
python标准库OS模块函数列表与实例全解
Mar 10 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 Python
python实现将字符串中的数字提取出来然后求和
Apr 02 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
PHP性能优化 产生高度优化代码
2011/07/22 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
分享最受欢迎的5款PHP框架
2014/11/27 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
JavaScript编写连连看小游戏
2015/07/07 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
Python数据结构之Array用法实例
2014/10/09 Python
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
python获取本地计算机名字的方法
2015/04/29 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
python中hashlib模块用法示例
2017/10/30 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
Python运行异常管理解决方案
2020/03/09 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
国外平面设计第一市场:99designs
2016/10/25 全球购物
KEEN美国官网:美国人气户外休闲鞋品牌
2021/03/09 全球购物
整改通知书格式
2015/04/22 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
警告通知
2015/04/25 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL
服务器SVN搭建图文安装过程
2022/06/21 Servers
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers