目次

前のトピックへ

11.9. gdbm — GNU による dbm の再実装

次のトピックへ

11.11. bsddb — Berkeley DB ライブラリへのインタフェース

このページ

11.10. dbhash — BSD データベースライブラリへの DBM 形式のインタフェース

バージョン 2.6 で撤廃: dbhash モジュールは Python 3.0 では削除されます。

dbhash モジュールでは BSD db ライブラリを使ってデータベースを開くための関数を提供します。このモジュールは、 DBM 形式のデータベースへのアクセスを提供する他の Python データベースモジュールのインタフェースをそのまま反映しています。 dbhash を使うには bsddb モジュールが必要です。

このモジュールでは一つの例外と一つの関数を提供しています:

exception dbhash.error

KeyError 以外のデータベースのエラーで送出されます。 bsddb.error と同じ意味です。

dbhash.open(path[, flag[, mode]])

データベース db を開き、データベースオブジェクトを返します。引数 path はデータベースファイルの名前です。

flag 引数は、次のいずれかの値になります。

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

BSD db ライブラリがロックをサポートしているプラットフォームでは、 flag に 'l' を追加して、ロックを利用することを指定できます。

オプションの mode 引数は、新たにデータベースを作成しなければならないときにデータベースファイルに設定すべき Unix ファイル権限ビットを表すために使われます; この値はプロセスの現在の umask 値でマスクされます。

参考

Module anydbm
dbm 形式のデータベースへの汎用インタフェース。
Module bsddb
BSD db ライブラリへの低レベルインタフェース。
Module whichdb
既存のデータベースがどの形式のデータベースか判定するユーティリティモジュール。

11.10.1. データベースオブジェクト

open() によって返されるデータベースオブジェクトは、全ての DBM 形式データベースやマップ型オブジェクトで共通のメソッドを提供します。それら標準のメソッドに加えて、以下のメソッドが利用可能です。

dbhash.first()

このメソッドと next() メソッドを使って、データベースの全てのキー/値のペアにわたってループ処理を行えます。探索はデータベースの内部ハッシュ値の順番に行われ、キーの値に順に並んでいるとは限りません。このメソッドは最初のキーを返します。

dbhash.last()

データベース探索における最後のキー/値を返します。逆順探索を開始する際に使うことができます; previous() を参照してください。

dbhash.next()

データベースの順方向探索において、次のよりも後に来るキー/値のペアを返します。以下のコードはデータベース db について、キー全てを含むリストをメモリ上に生成することなく全てのキーを出力します。

print db.first()
for i in xrange(1, len(db)):
    print db.next()
dbhash.previous()

データベースの逆方向探索において、手前に来るキー/値のペアを返します。 last() と併せて、逆方向の探索に用いられます。

dbhash.sync()

このメソッドはディスクにまだ書き込まれていないデータを全て書き込ませます。