11.6. anydbm — DBM 形式のデータベースへの汎用アクセスインタフェース

注釈

anydbm モジュールはPython 3 では dbm に名前が変更されました。 2to3 ツールが自動的に import を変換します。

anydbm は種々の DBM データベース — dbhash (要 bsddb)、 gdbm 、および dbm — への汎用インタフェースです。これらのモジュールがどれもインストールされていない場合、 dumbdbm モジュールの低速で単純な DBM 実装が使われます。

anydbm.open(filename[, flag[, mode]])

データベースファイル filename を開いて対応するオブジェクトを返します。

データベースファイルが既に存在する場合、その種類を決定するために whichdb モジュールが使用され、適切なモジュールが使用されます; データベースファイルが存在しない場合、上記のリストの中でインポート可能な最初のモジュールが使用されます。

オプションの flag は以下の値のいずれかです:

意味
'r' 既存のデータベースを読み込み専用で開く (デフォルト)
'w' 既存のデータベースを読み書き用に開く
'c' データベースを読み書き用に開く。ただし存在しない場合には新たに作成する
'n' 常に新たに読み書き用の新規のデータベースを作成する

この引数が指定されない場合、標準の値は 'r' になります。

オプションの mode 引数は、新たにデータベースを作成しなければならない場合に使われる Unix のファイルモードです。標準の値は 8 進数の 0666 です (この値は現在有効な umask で修飾されます)。

exception anydbm.error

サポートされているモジュールそれぞれによって送出される可能性のある例外を含むタプル。これにはユニークな例外があり、最初の要素として同じく anydbm.error という名前の例外が含まれます — anydbm.error が送出される場合、後者 (訳注:タプルの anydbm.error ではなく例外 anydbm.error) が使用されます。

open() によって返されたオブジェクトは辞書とほとんど同じ機能をサポートします; キーとそれに対応付けられた値を記憶し、取り出し、削除することができ、 has_key() メソッドと keys() メソッドが使えます。キーと値は常に文字列でなければなりません。

以下の例ではホスト名と対応するタイトルがいくつか登録し、データベースの内容を表示します:

import anydbm

# Open database, creating it if necessary.
db = anydbm.open('cache', 'c')

# Record some values
db['www.python.org'] = 'Python Website'
db['www.cnn.com'] = 'Cable News Network'

# Loop through contents.  Other dictionary methods
# such as .keys(), .values() also work.
for k, v in db.iteritems():
    print k, '\t', v

# Storing a non-string key or value will raise an exception (most
# likely a TypeError).
db['www.yahoo.com'] = 4

# Close when done.
db.close()

辞書型形式のメソッドに加えて、anydbm オブジェクトには以下のメソッドがあります:

anydbm.close()

anydbm データベースをクローズします。

参考

dbhash モジュール
BSD db データベースインタフェース。
dbm モジュール
標準の Unix データベースインタフェース。
dumbdbm モジュール
dbm インタフェースの移植性のある実装。
gdbm モジュール
dbm インタフェースに基づいた GNU データベースインタフェース。
shelve モジュール
Python dbm インタフェース上に構築された汎用オブジェクト永続化機構。
whichdb モジュール
既存のデータベースがどの形式のデータベースか判定するユーティリティモジュール。