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脚本生成Android SALT扰码的方法
Sep 18 Python
python列表的增删改查实例代码
Jan 30 Python
使用Python进行QQ批量登录的实例代码
Jun 11 Python
python实现高斯(Gauss)迭代法的例子
Nov 20 Python
基于python实现学生信息管理系统
Nov 22 Python
Django项目基础配置和基本使用过程解析
Nov 25 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 Python
使用OpenCV circle函数图像上画圆的示例代码
Dec 27 Python
Python模拟登入的N种方式(建议收藏)
May 31 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 Python
使用py-spy解决scrapy卡死的问题方法
Sep 29 Python
python通配符之glob模块的使用详解
Apr 24 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 Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
php递归实现无限分类的方法
2015/07/28 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
php之可变函数的实例详解
2017/09/13 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
vue 如何使用递归组件
2020/10/23 Javascript
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
Numpy之random函数使用学习
2019/01/29 Python
Python3简单实现串口通信的方法
2019/06/12 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
应届毕业生求职信范文
2013/12/18 职场文书
儿子婚宴答谢词
2014/01/09 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
好的促销活动方案
2014/08/21 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
导游词之青城山景区
2019/09/27 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
Python何绘制带有背景色块的折线图
2022/04/23 Python