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 16 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
Python程序控制语句用法实例分析
Jan 14 Python
python编程进阶之类和对象用法实例分析
Feb 21 Python
opencv python在视屏上截图功能的实现
Mar 05 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
Python Selenium库的基本使用教程
Jan 04 Python
浅析python连接数据库的重要事项
Feb 22 Python
Opencv 图片的OCR识别的实战示例
Mar 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
COM in PHP (winows only)
2006/10/09 PHP
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
PHP漏洞全解(详细介绍)
2012/11/13 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
python连接mysql调用存储过程示例
2014/03/05 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
python实现人机猜拳小游戏
2020/02/03 Python
通过自学python能找到工作吗
2020/06/21 Python
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
职高毕业生自我鉴定
2013/10/21 职场文书
房地产员工找工作的自我评价
2013/11/15 职场文书
综合办公室主任职责
2013/12/16 职场文书
迎八一活动主题
2014/01/31 职场文书
大学生求职计划书
2014/04/30 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL