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控制台显示时钟的示例
Feb 24 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
Sep 18 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
python3实现磁盘空间监控
Jun 21 Python
python机器学习之KNN分类算法
Aug 29 Python
python简单区块链模拟详解
Jul 03 Python
Python动态导入模块和反射机制详解
Feb 18 Python
基于spring boot 日志(logback)报错的解决方式
Feb 20 Python
python中PyQuery库用法分享
Jan 15 Python
Python Process创建进程的2种方法详解
Jan 25 Python
Python之qq自动发消息的示例代码
Feb 18 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
5.PHP的其他功能
2006/10/09 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
PHP面向对象程序设计之类与反射API详解
2016/12/02 PHP
PHP去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
JS中判断null的方法分析
2016/11/21 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
vue .sync修饰符的使用详解
2018/06/15 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
[02:24]DOTA2亚洲邀请赛 NAVI战队出场宣传片
2015/02/07 DOTA
python实现通过shelve修改对象实例
2014/09/26 Python
神经网络python源码分享
2017/12/15 Python
python爬虫爬取某站上海租房图片
2018/02/04 Python
Python实现按中文排序的方法示例
2018/04/25 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
CSS 3.0文字悬停跳动特效代码
2020/10/26 HTML / CSS
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
shell程序中如何注释
2012/02/17 面试题
六年级数学教学反思
2014/02/03 职场文书
高中军训感言600字
2014/03/11 职场文书
中秋寄语大全
2014/04/11 职场文书
国庆节促销广告语2014
2014/09/19 职场文书
党员批评与自我批评
2014/10/15 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
毕业感言怎么写
2015/07/31 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers