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

バージョン 2.6 で非推奨: "dbhash" モジュールは Python 3 で削除されまし
た。

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

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

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 値でマスクさ
   れます。

参考:

  "anydbm" モジュール
     "dbm" スタイルの汎用的なインタフェース

  "bsddb" モジュール
     BSD "db" ライブラリへの低レベルインタフェース。

  "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()

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