新聞中心
dbm —- Unix “數(shù)據(jù)庫” 接口
源代碼: Lib/dbm/__init__.py

dbm 是一種泛用接口,針對各種 DBM 數(shù)據(jù)庫 —- 包括 dbm.gnu 或 dbm.ndbm。 如果未安裝這些模塊中的任何一種,則將使用 dbm.dumb 模塊中慢速但簡單的實現(xiàn)。 還有一個適用于 Oracle Berkeley DB 的 第三方接口。
exception dbm.error
一個元組,其中包含每個受支持的模塊可引發(fā)的異常,另外還有一個名為 dbm.error 的特殊異常作為第一項 —- 后者最在引發(fā) dbm.error 時被使用。
dbm.whichdb(filename)
此函數(shù)會猜測各種簡單數(shù)據(jù)庫模塊中的哪一個是可用的 —- dbm.gnu, dbm.ndbm 還是 dbm.dumb —- 應(yīng)該被用來打開給定的文件。
返回下列值中的一個:如果文件由于不可讀或不存在而無法打開則返回 None;如果文件的格式無法猜測則返回空字符串 ('');或是包含所需模塊名稱的字符串,例如 'dbm.ndbm' 或 'dbm.gnu'。
在 3.11 版更改: Accepts path-like object for filename.
dbm.open(file, flag=’r’, mode=0o666)
打開數(shù)據(jù)庫文件 file 并返回一個相應(yīng)的對象。
如果數(shù)據(jù)庫文件已存在,則使用 whichdb() 函數(shù)來確定其類型和要使用的適當(dāng)模塊;如果文件不存在,則會使用上述可導(dǎo)入模塊中的第一個。
可選的 flag 參數(shù)可以是:
|
值 |
含意 |
|---|---|
|
|
以只讀方式打開現(xiàn)有數(shù)據(jù)庫(默認(rèn)) |
|
|
以讀寫方式打開現(xiàn)有數(shù)據(jù)庫 |
|
|
以讀寫方式打開數(shù)據(jù)庫,如果不存在則創(chuàng)建它 |
|
|
始終創(chuàng)建一個新的空數(shù)據(jù)庫,以讀寫方式打開 |
可選的 mode 參數(shù)是文件的 Unix 模式,僅在要創(chuàng)建數(shù)據(jù)庫時才會被使用。 其默認(rèn)值為八進(jìn)制數(shù) 0o666 (并將被當(dāng)前的 umask 所修改)。
open() 所返回的對象支持與字典相同的基本功能;可以存儲、獲取和刪除鍵及其對應(yīng)的值,并可使用 in 運算符和 keys() 方法,以及 get() 和 setdefault()。
在 3.2 版更改: 現(xiàn)在 get() 和 setdefault() 在所有數(shù)據(jù)庫模塊中均可用。
在 3.8 版更改: 從只讀數(shù)據(jù)庫中刪除鍵將引發(fā)數(shù)據(jù)庫模塊專屬的錯誤而不是 KeyError。
在 3.11 版更改: Accepts path-like object for file.
鍵和值總是被存儲為字節(jié)串。 這意味著當(dāng)使用字符串時它們會在被存儲之前隱式地轉(zhuǎn)換至默認(rèn)編碼格式。
這些對象也支持在 with 語句中使用,當(dāng)語句結(jié)束時將自動關(guān)閉它們。
在 3.4 版更改: 向 open() 所返回的對象添加了上下文管理協(xié)議的原生支持。
以下示例記錄了一些主機(jī)名和對應(yīng)的標(biāo)題,隨后將數(shù)據(jù)庫的內(nèi)容打印出來。:
import dbm# Open database, creating it if necessary.with dbm.open('cache', 'c') as db:# Record some valuesdb[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
存儲非字符串?dāng)?shù)據(jù)的持久化模塊。
以下部分描述了各個單獨的子模塊。
dbm.gnu —- GNU 對 dbm 的重解析
源代碼: Lib/dbm/gnu.py
此模塊與 dbm 模塊很相似,但是改用 GNU 庫 gdbm 來提供某些附加功能。 請注意由 dbm.gnu 與 dbm.ndbm 所創(chuàng)建的文件格式是不兼容的。
dbm.gnu 模塊提供了對 GNU DBM 庫的接口。 dbm.gnu.gdbm 對象的行為類似于映射(字典),區(qū)別在于其鍵和值總是會在存儲之前被轉(zhuǎn)換為字節(jié)串。 打印 gdbm 對象不會打印出鍵和值,并且 items() 和 values() 等方法也不受支持。
exception dbm.gnu.error
針對 dbm.gnu 專屬錯誤例如 I/O 錯誤引發(fā)。 KeyError 的引發(fā)則針對一般映射錯誤例如指定了不正確的鍵。
dbm.gnu.open(filename[, flag[, mode]])
打開一個 gdbm 數(shù)據(jù)庫并返回 gdbm 對象。 filename 參數(shù)為數(shù)據(jù)庫文件名稱。
可選的 flag 參數(shù)可以是:
|
值 |
含意 |
|---|---|
|
|
以只讀方式打開現(xiàn)有數(shù)據(jù)庫(默認(rèn)) |
|
|
以讀寫方式打開現(xiàn)有數(shù)據(jù)庫 |
|
|
以讀寫方式打開數(shù)據(jù)庫,如果不存在則創(chuàng)建它 |
|
|
始終創(chuàng)建一個新的空數(shù)據(jù)庫,以讀寫方式打開 |
下列附加字符可被添加至旗標(biāo)以控制數(shù)據(jù)庫的打開方式:
|
值 |
含意 |
|---|---|
|
|
以快速模式打開數(shù)據(jù)庫。寫入數(shù)據(jù)庫將不會同步。 |
|
|
同步模式。這將導(dǎo)致數(shù)據(jù)庫的更改立即寫入文件。 |
|
|
不要鎖定數(shù)據(jù)庫。 |
不是所有旗標(biāo)都可用于所有版本的 gdbm。 模塊常量 open_flags 為包含受支持旗標(biāo)字符的字符串。 如果指定了無效的旗標(biāo)則會引發(fā) error。
可選的 mode 參數(shù)是文件的 Unix 模式,僅在要創(chuàng)建數(shù)據(jù)庫時才會被使用。 其默認(rèn)值為八進(jìn)制數(shù) 0o666。
除了與字典類似的方法,gdbm 對象還有以下方法:
在 3.11 版更改: Accepts path-like object for filename.
-
gdbm.firstkey()
使用此方法和 nextkey() 方法可以循環(huán)遍歷數(shù)據(jù)庫中的每個鍵。 遍歷的順序是按照
gdbm的內(nèi)部哈希值,而不會根據(jù)鍵的值排序。 此方法將返回起始鍵。 -
gdbm.nextkey(key)
在遍歷中返回 key 之后的的下一個鍵。 以下代碼將打印數(shù)據(jù)庫
db中的每個鍵,而不會在內(nèi)存中創(chuàng)建一個包含所有鍵的列表:k = db.firstkey()while k is not None:print(k)k = db.nextkey(k)
-
gdbm.reorganize()
如果你進(jìn)行了大量刪除操作并且想要縮減
gdbm文件所使用的空間,此例程將可重新組織數(shù)據(jù)庫。 除非使用此重組功能否則gdbm對象不會縮減數(shù)據(jù)庫文件大??;在其他情況下,被刪除的文件空間將會保留并在添加新的 (鍵, 值) 對時被重用。 -
gdbm.sync()
當(dāng)以快速模式打開數(shù)據(jù)庫時,此方法會將任何未寫入數(shù)據(jù)強(qiáng)制寫入磁盤。
-
gdbm.close()
關(guān)閉
gdbm數(shù)據(jù)庫。
dbm.ndbm —- 基于 ndbm 的接口
源代碼: Lib/dbm/ndbm.py
dbm.ndbm 模塊提供了對 Unix “(n)dbm” 庫的接口。 Dbm 對象的行為類似于映射(字典),區(qū)別在于其鍵和值總是被存儲為字節(jié)串。 打印 dbm 對象不會打印出鍵和值,并且 items() 和 values() 等方法也不受支持。
此模塊可與 “經(jīng)典classic” ndbm 接口或 GNU GDBM 兼容接口一同使用。 在 Unix 上,configure 腳本將嘗試定位適當(dāng)?shù)念^文件來簡化此模塊的構(gòu)建。
exception dbm.ndbm.error
針對 dbm.ndbm 專屬錯誤例如 I/O 錯誤引發(fā)。 KeyError 的引發(fā)則針對一般映射錯誤例如指定了不正確的鍵。
dbm.ndbm.library
所使用的 ndbm 實現(xiàn)庫的名稱。
dbm.ndbm.open(filename[, flag[, mode]])
打開一個 dbm 數(shù)據(jù)庫并返回 ndbm 對象。 filename 參數(shù)為數(shù)據(jù)庫文件名稱(不帶 .dir 或 .pag 擴(kuò)展名)。
可選的 flag 參數(shù)必須是下列值之一:
|
值 |
含意 |
|---|---|
|
|
以只讀方式打開現(xiàn)有數(shù)據(jù)庫(默認(rèn)) |
|
|
以讀寫方式打開現(xiàn)有數(shù)據(jù)庫 |
|
|
以讀寫方式打開數(shù)據(jù)庫,如果不存在則創(chuàng)建它 |
|
|
始終創(chuàng)建一個新的空數(shù)據(jù)庫,以讀寫方式打開 |
可選的 mode 參數(shù)是文件的 Unix 模式,僅在要創(chuàng)建數(shù)據(jù)庫時才會被使用。 其默認(rèn)值為八進(jìn)制數(shù) 0o666 (并將被當(dāng)前的 umask 所修改)。
除了與字典類似的方法,ndbm 對象還有以下方法:
在 3.11 版更改: Accepts path-like object for filename.
-
ndbm.close()
關(guān)閉
ndbm數(shù)據(jù)庫。
dbm.dumb —- 便攜式 DBM 實現(xiàn)
源代碼: Lib/dbm/dumb.py
備注
dbm.dumb 模塊的目的是在更健壯的模塊不可用時作為 dbm 模塊的最終回退項。 dbm.dumb 不是為高速運行而編寫的,也不像其他數(shù)據(jù)庫模塊一樣被經(jīng)常使用。
dbm.dumb 模塊提供了一個完全以 Python 編寫的持久化字典類接口。 不同于 dbm.gnu 等其他模塊,它不需要外部庫。 與其他持久化映射一樣,它的鍵和值也總是被存儲為字節(jié)串。
該模塊定義以下內(nèi)容:
exception dbm.dumb.error
針對 dbm.dumb 專屬錯誤例如 I/O 錯誤引發(fā)。 KeyError 的引發(fā)則針對一般映射例如指定了不正確的鍵。
dbm.dumb.open(filename[, flag[, mode]])
打開一個 dumbdbm 數(shù)據(jù)庫并返回 dumbdbm 對象。 filename 參數(shù)為數(shù)據(jù)庫文件的主名稱(不帶任何特定擴(kuò)展名)。 創(chuàng)建一個 dumbdbm 數(shù)據(jù)庫時將創(chuàng)建多個帶有 .dat 和 .dir 擴(kuò)展名的文件。
可選的 flag 參數(shù)可以是:
|
值 |
含意 |
|---|---|
|
|
以只讀方式打開現(xiàn)有數(shù)據(jù)庫(默認(rèn)) |
|
|
以讀寫方式打開現(xiàn)有數(shù)據(jù)庫 |
|
|
以讀寫方式打開數(shù)據(jù)庫,如果不存在則創(chuàng)建它 |
|
|
始終創(chuàng)建一個新的空數(shù)據(jù)庫,以讀寫方式打開 |
可選的 mode 參數(shù)是文件的 Unix 模式,僅在要創(chuàng)建數(shù)據(jù)庫時才會被使用。 其默認(rèn)值為八進(jìn)制數(shù) 0o666 (并將被當(dāng)前的 umask 所修改)。
警告
當(dāng)載入包含足夠巨大/復(fù)雜條目的數(shù)據(jù)庫時有可能導(dǎo)致 Python 解釋器的崩潰,這是由于 Python AST 編譯器有棧深度限制。
在 3.5 版更改: open() 在 flag 值為 'n' 時將總是創(chuàng)建一個新的數(shù)據(jù)庫。
在 3.8 版更改: 附帶 'r' 旗標(biāo)打開的數(shù)據(jù)庫現(xiàn)在將是只讀的。 附帶 'r' 和 'w' 旗標(biāo)的打開操作不會再創(chuàng)建數(shù)據(jù)庫。
在 3.11 版更改: Accepts path-like object for filename.
除了 collections.abc.MutableMapping 類所提供的方法,dumbdbm 對象還提供了以下方法:
-
dumbdbm.sync()
同步磁盤上的目錄和數(shù)據(jù)文件。 此方法會由
Shelve.sync()方法來調(diào)用。 -
dumbdbm.close()
關(guān)閉
dumbdbm數(shù)據(jù)庫。
新聞名稱:創(chuàng)新互聯(lián)Python教程:dbm—-Unix“數(shù)據(jù)庫”接口
新聞來源:http://fisionsoft.com.cn/article/dpeppep.html


咨詢
建站咨詢
