# 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` モジュール
  既存のデータベースがどの形式のデータベースか判定するユーティリティモジュール。