Python3标准库之dbm UNIX键-值数据库问题

 更新时间:2020年03月24日 09:25:47   作者:@小灰灰  
dbm是面向DBM数据库的一个前端,DBM数据库使用简单的字符串值作为键来访问包含字符串的记录。这篇文章主要介绍了Python3标准库:dbm UNIX键-值数据库的相关知识,需要的朋友可以参考下

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科学计算库Scipy及安装步骤

    深入浅析Python科学计算库Scipy及安装步骤

    这篇文章主要介绍了Python科学计算库—Scipy的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • python使用PyGame模块播放声音的方法

    python使用PyGame模块播放声音的方法

    这篇文章主要介绍了python使用PyGame模块播放声音的方法,实例分析了PyGame模块的使用技巧,需要的朋友可以参考下
    2015-05-05
  • python strip()函数 介绍

    python strip()函数 介绍

    Python strip() 方法用于移除字符串头尾指定的字符,需要的朋友可以参考下
    2013-05-05
  • 使用Python实现绘制地图的示例详解

    使用Python实现绘制地图的示例详解

    这篇文章主要为大家详细介绍了如何使用Python实现绘制地图相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • Python pandas中read_csv参数示例详解

    Python pandas中read_csv参数示例详解

    使用pandas做数据处理的第一步就是读取数据,数据源可以来自于各种地方,csv文件便是其中之一,下面这篇文章主要给大家介绍了关于Python pandas中read_csv参数详解的相关资料,需要的朋友可以参考下
    2023-01-01
  • Python使用pandas和openpyxl读取Excel表格的方法详解

    Python使用pandas和openpyxl读取Excel表格的方法详解

    这篇文章主要介绍了Python读取Excel表格数据的方法,Python提供了多种读取Excel文件的方式,最常用的库是pandas和openpyxl,下面我将详细介绍如何使用这两个库来读取Excel文件,并包含一些实用示例,需要的朋友可以参考下
    2024-10-10
  • django 类视图的使用方法详解

    django 类视图的使用方法详解

    这篇文章主要介绍了django 类视图的使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • pygame实现飞机大战

    pygame实现飞机大战

    这篇文章主要为大家详细介绍了pygame实现飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • python实现RabbitMQ的消息队列的示例代码

    python实现RabbitMQ的消息队列的示例代码

    这篇文章主要介绍了python实现RabbitMQ的消息队列的示例代码,总结了RabbitMQ中三种exchange模式的实现,分别是fanout, direct和topic。感兴趣的小伙伴们可以参考一下
    2018-11-11
  • python-pymysql获取字段名称-获取内容方式

    python-pymysql获取字段名称-获取内容方式

    这篇文章主要介绍了python-pymysql获取字段名称-获取内容方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论