8.7 組み込みモジュール gdbm

 

このモジュールは、dbm モジュールとよく似ていますが、gdbm を 使うことによりいくつかの追加機能が提供されます。gdbmdbm により作成されるファイルのフォーマットには互換性が無いことに注意してください。  

gdbm モジュールは、GNU の DBM ライブラリとのインターフェースを提供 します。gdbm オブジェクトは、キーと値が常に文字列であること以外は マッピング(ディクショナリ)と同様に扱うことができます。 gdbm をプリントさせようとしても、キーと値は出力されません。また、 items()values() メソッドもサポートしていません。

このモジュールには、以下の定数と関数が定義されています。

error
I/O エラーのような、gdbm 固有のエラーが発生した場合にあげられます。 KeyError エラーは、正しくないキーを指定した場合のような一般的な マッピングエラーに対してあげられます。

open (filename, [flag, [mode]])
gdbm データベースをオープンし、gdbm オブジェクトを返します。 引数 filename は、データベースファイルの名前です。

オプションの引数 flag には、次の値を指定することができます。 'r'(既存のデータベースを、読み込み専用モードでオープンします −− デフォルト)、'w'(既存のデータベースを、読み込み/書き込みモードで オープンします)、'c'(存在しなければデータベースを作成します)、 'n'(常に新しい空のデータベースを作成します)。

データベースを高速モードでオープンする場合には、flag に f を追加して ください。この時には、全ての変更が終わった後に、変更データがディスクに自動的に 書き込まれます。このことにより、結果的にデータベースへの書き込みが高速にはなり ますが、データベースをオープンしたままプログラムがクラッシュした場合には、 矛盾したデータベースになってしまう可能性があります。書き込まれていないデータを、 強制的にディスクに書き込むためには、sync() メソッドを使用してください。

オプションの引数 mode は、Unix のファイルモードです。データベースが 作成されなければならない時にだけ使用してください。デフォルト値は、8進の 0666 です。

さらに、gdbm オブジェクトは、ディクショナリのような以下のメソッドも 持っています。

firstkey ()
このメソッドと nextkey() メソッドを使うことにより、データベースの 全てのキーを取り出すことができます。取り出す順序は、gdbm 内部の ハッシュ値の順序で、キー値によってソートはされません。このメソッドは、最初の キーを返します。

nextkey (key)
キー取り出しのループ中で、次の key を返します。以下のコードは、データ ベース db の中の全てのキーをプリントします。ただし、全てのキーを含んだ リストをメモリ内に作成することはしません。
k=db.firstkey()
while k!=None:
    print k
    k=db.nextkey(k)

reorganize ()
大量のデータを削除して、gdbm ファイルが使用しているスペースを減らしたい ような場合に、このルーチンによりデータベースを再構成することができます。 gdbm は、この再構成を行う以外にはデータベースファイルが使用している スペースを開放しません。削除されたデータのスペースは保存され、新しいキーと 値の組を追加する時に再利用されます。

sync ()
データベースが高速モードでオープンされている時に、このメソッドは未書き込みの データを強制的にディスクに書き込みます。

guido@python.org