dbm与Unix“数据库”的接口(4)pickle和marshal模块永久存储Python数据(必读进阶Python教程)(参考资料)
dbm
是DBM数据库变体的通用接口 – dbm.gnu
或dbm.ndbm
。如果没有安装这些模块,dbm.dumb
将使用模块中缓慢但简单的实现。Oracle Berkeley DB 有第三方接口。
- 异常
dbm.
error
- 包含可由每个受支持模块引发的异常的元组,其中唯一的异常也
dbm.error
称为第一个项 – 后者在dbm.error
引发时使用。
dbm.
whichdb
(文件名)- 这个函数尝试猜测哪些可用的几个简单的数据库模块-
dbm.gnu
,dbm.ndbm
或dbm.dumb
-应该用来打开一个指定的文件。返回以下值之一:
None
如果由于文件不可读或不存在而无法打开文件;''
如果无法猜到文件的格式,则为空字符串(); 或包含所需模块名称的字符串,例如'dbm.ndbm'
或'dbm.gnu'
。
dbm.
open
(file,flag =’r’,mode = 0o666 )- 打开数据库文件文件并返回相应的对象。
如果数据库文件已存在,
whichdb()
则使用该函数确定其类型并使用相应的模块; 如果它不存在,则使用上面列出的可以导入的第一个模块。可选的flag参数可以是:
值 含义 'r'
打开现有数据库以进行只读(默认) 'w'
打开现有数据库进行读写 'c'
打开数据库进行读写,如果不存在则创建它 'n'
始终创建一个新的空数据库,打开以进行读写 可选模式参数是文件的Unix模式,仅在必须创建数据库时使用。它默认为八进制
0o666
(并将由流行的umask修改)。
返回的对象open()
支持与字典相同的基本功能; 键和它们的对应的值可以被存储,检索和删除,并且in
操作者和keys()
方法是可用的,以及get()
和setdefault()
。
改变在3.2版本:get()
和setdefault()
现在在所有数据库模块中可用。
键和值始终存储为字节。这意味着在使用字符串时,它们会在存储之前隐式转换为默认编码。
这些对象还支持在with
语句中使用,语句在完成后将自动关闭它们。
在3.4版中更改:为返回的对象添加了对上下文管理协议的本机支持open()
。
以下示例记录了一些主机名和相应的标题,然后打印出数据库的内容:
import dbm
# Open database, creating it if necessary.
with dbm.open('cache', 'c') as db:
# Record some values
db[b'hello'] = b'there'
db['www.python.org'] = 'Python Website'
db['www.cnn.com'] = 'Cable News Network'
# Note that the keys are considered bytes now.
assert db[b'www.python.org'] == b'Python Website'
# Notice how the value is now in bytes.
assert db['www.cnn.com'] == b'Cable News Network'
# Often-used methods of the dict interface work too.
print(db.get('python.org', b'not present'))
# Storing a non-string key or value will raise an exception (most
# likely a TypeError).
db['www.yahoo.com'] = 4
# db is automatically closed when leaving the with statement.
也可以看看
- 模
shelve
- 存储非字符串数据的持久性模块。
各个子模块将在以下部分中介绍。
dbm.gnu
– GNU对dbm的重新解释
源代码: Lib / dbm / gnu.py
该模块与模块非常相似dbm
,但使用GNU库 gdbm
来提供一些额外的功能。请注意,由dbm.gnu
和创建的文件格式dbm.ndbm
不兼容。
该dbm.gnu
模块提供GNU DBM库的接口。 dbm.gnu.gdbm
对象的行为类似于映射(字典),除了键和值总是在存储之前转换为字节。打印gdbm
对象不会打印键和值,并且不支持items()
和values()
方法。
- 异常
dbm.gnu.
error
- 引发
dbm.gnu
特定于错误的错误,例如I / O错误。KeyError
引发了一般映射错误,例如指定了错误的键。
dbm.gnu.
open
(filename [,flag [,mode ] ] )- 打开
gdbm
数据库并返回一个gdbm
对象。该文件名 参数是数据库文件的名称。可选的flag参数可以是:
值 含义 'r'
打开现有数据库以进行只读(默认) 'w'
打开现有数据库进行读写 'c'
打开数据库进行读写,如果不存在则创建它 'n'
始终创建一个新的空数据库,打开以进行读写 可以在标志后附加以下附加字符以控制数据库的打开方式:
值 含义 'f'
以快速模式打开数据库。写入数据库将不会同步。 's'
同步模式。这将导致数据库的更改立即写入文件。 'u'
不要锁定数据库。 并非所有标志都适用于所有版本的
gdbm
。模块常量open_flags
是一组受支持的标志字符。error
如果指定了无效标志,则引发异常 。可选模式参数是文件的Unix模式,仅在必须创建数据库时使用。它默认为八进制
0o666
。除了类字典方法之外,
gdbm
对象还有以下方法:gdbm.
firstkey
()- 使用此方法和
nextkey()
方法可以遍历数据库中的每个键 。遍历按gdbm
内部哈希值排序,不会按键值排序。此方法返回起始键。
gdbm.
nextkey
(关键)- 返回遍历中键后面的键。以下代码打印数据库中的每个键
db
,而不必在内存中创建包含所有键的列表:k = db.firstkey() while k != None: print(k) k = db.nextkey(k)
gdbm.
reorganize
()- 如果您执行了大量删除操作并希望缩小
gdbm
文件使用的空间,则此例程将重新组织数据库。gdbm
除非使用此重组,否则对象不会缩短数据库文件的长度; 否则,删除的文件空间将被保留并重新使用,因为添加了新的(键,值)对。
gdbm.
sync
()- 在快速模式下打开数据库时,此方法会强制将任何未写入的数据写入磁盘。
gdbm.
close
()- 关闭
gdbm
数据库。
dbm.ndbm
– 基于ndbm的接口
源代码: Lib / dbm / ndbm.py
该dbm.ndbm
模块提供了Unix“(n)dbm”库的接口。Dbm对象的行为类似于映射(字典),但键和值始终存储为字节。打印dbm
对象不会打印键和值,并且不支持items()
和values()
方法。
该模块可与“经典”ndbm接口或GNU GDBM兼容接口一起使用。在Unix上,configure脚本将尝试找到相应的头文件以简化构建此模块。
- 异常
dbm.ndbm.
error
- 引发
dbm.ndbm
特定于错误的错误,例如I / O错误。KeyError
引发了一般映射错误,例如指定了错误的键。
dbm.ndbm.
library
ndbm
使用的实现库的名称。
dbm.ndbm.
open
(filename [,flag [,mode ] ] )- 打开dbm数据库并返回一个
ndbm
对象。该文件名参数是数据库文件名(不带.dir
或.pag
扩展)。可选的flag参数必须是以下值之一:
值 含义 'r'
打开现有数据库以进行只读(默认) 'w'
打开现有数据库进行读写 'c'
打开数据库进行读写,如果不存在则创建它 'n'
始终创建一个新的空数据库,打开以进行读写 可选模式参数是文件的Unix模式,仅在必须创建数据库时使用。它默认为八进制
0o666
(并将由流行的umask修改)。除了类字典方法之外,
ndbm
对象还提供以下方法:ndbm.
close
()- 关闭
ndbm
数据库。
dbm.dumb
– 便携式DBM实现
源代码: Lib / dbm / dumb.py
注意
该dbm.dumb
模块的目的是作为最后的手段后备的 dbm
模块时,一个更强大的模块不可用。该dbm.dumb
模块不是为了速度而编写的,并不像其他数据库模块那样大量使用。
该dbm.dumb
模块提供了一个类似于字典的持久化接口,完全用Python编写。与其他模块不同,例如dbm.gnu
不需要外部库。与其他持久性映射一样,键和值始终存储为字节。
该模块定义以下内容:
- 异常
dbm.dumb.
error
- 引发
dbm.dumb
特定于错误的错误,例如I / O错误。KeyError
引发了一般映射错误,例如指定了错误的键。
dbm.dumb.
open
(filename [,flag [,mode ] ] )- 打开
dumbdbm
数据库并返回一个dumbdbm对象。该文件名参数是数据库文件的基本名称(没有任何具体的扩展)。创建dumbdbm数据库时,将创建带有.dat
和.dir
扩展名的文件。可选的flag参数仅支持语义
'c'
和'n'
值。其他值将默认为始终为更新打开数据库,如果不存在则将创建。可选模式参数是文件的Unix模式,仅在必须创建数据库时使用。它默认为八进制
0o666
(并将由流行的umask修改)。警告
由于Python的AST编译器中的堆栈深度限制,在加载具有足够大/复杂条目的数据库时,可能会崩溃Python解释器。
在版本3.5中更改:
open()
当标志具有值时,始终创建新数据库'n'
。从版本3.6开始不推荐使用,将在版本3.8中删除:在
'r'
和'w'
模式下创建数据库。以'r'
模式修改数据库 。除了
collections.abc.MutableMapping
类dumbdbm
提供的方法之外,对象还提供以下方法:dumbdbm.
sync
()- 同步磁盘目录和数据文件。该方法调用该
Shelve.sync()
方法。
dumbdbm.
close
()- 关闭
dumbdbm
数据库。