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 16 Python
使用Python中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
详解Python文本操作相关模块
Jun 22 Python
python下载文件记录黑名单的实现代码
Oct 24 Python
Python设计模式之观察者模式原理与用法详解
Jan 16 Python
关于Python-faker的函数效果一览
Nov 28 Python
详解Anaconda安装tensorflow报错问题解决方法
Nov 01 Python
Python基于Webhook实现github自动化部署
Nov 28 Python
python 模块导入问题汇总
Feb 01 Python
python实现ROA算子边缘检测算法
Apr 05 Python
用Python提取PDF表格的方法
Apr 11 Python
Python机器学习实战之k-近邻算法的实现
Nov 27 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
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
JS 分号引起的一段调试问题
2009/06/18 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
2013/05/07 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
小程序使用wxs解决wxml保留2位小数问题
2019/12/13 Javascript
[47:46]完美世界DOTA2联赛 Magma vs GXR 第三场 11.07
2020/11/10 DOTA
浅谈Python NLP入门教程
2017/12/25 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
python3处理含有中文的url方法
2018/05/10 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
python logging设置level失败的解决方法
2020/02/19 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
新东网科技Java笔试题
2012/07/13 面试题
EJB与JAVA BEAN的区别
2016/08/29 面试题
美发活动策划书
2014/01/14 职场文书
物控部经理职务说明书
2014/02/25 职场文书
2015年新农合工作总结
2015/03/30 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
如何起草一份正确的合伙创业协议书?
2019/07/04 职场文书
吃通javascript正则表达式
2021/04/21 Javascript