前のトピックへ

11.5. marshal — 内部使用向けの Python オブジェクト整列化

次のトピックへ

11.7. whichdb — どのDBMモジュールがデータベースを作ったかを推測する

このページ

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

ノート

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

anydbm は種々の DBM データベース — (bsddb を使う) dbhashgdbm 、および 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 が送出された場合、後者が使われます。

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

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

import anydbm

# データベースを開く、必要なら作成する
db = anydbm.open('cache', 'c')

# いくつかの値を設定する
db['www.python.org'] = 'Python Website'
db['www.cnn.com'] = 'Cable News Network'

# 内容についてループ。
# .keys(), .values() のような他の辞書メソッドもつかえます。
for k, v in db.iteritems():
    print k, '\t', v

# 文字列でないキーまたは値は例外を
# おこします(ほとんどのばあい TypeErrorです)。
db['www.yahoo.com'] = 4

# 終了したらcloseします。
db.close()

参考

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