8.7 gdbm -- GNU による dbm の再実装

利用可能な条件: Unix.

このモジュールは dbm モジュールに よく似ていますが、gdbm を使っていくつかの追加機能を提供しています。 gdbmdbm では生成されるファイル形式に互換性がないので 注意してください。

gdbm モジュールでは GNU DBM ライブラリへのインタフェースを 提供します。gdbm オブジェクトはキーと値が常に文字列である ことを除き、マップ型 (辞書型) と同じように動作します。 gdbm オブジェクトに対して print を適用しても キーや値を印字することはなく、items() 及び values() メソッドはサポートされていません。

このモジュールでは以下の定数および関数を定義しています:

exception error
I/O エラーのような gdbm 特有のエラーで送出されます。 誤ったキーの指定のように、一般的なマップ型のエラーに対しては KeyError が送出されます。

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

オプションの flag としては、 'r' (既存のデータベースを読み込み専用で開く -- 標準の値です)、 'w' (既存のデータベースを読み書き用に開く)、 'c' (既存のデータベースが存在しない場合には新たに作成する)、または 'n' (常に新たにデータベースを作成する)、をとることができます。

データベースをどのように開くかを制御するために、フラグに以下の文字を 追加することができます:

全てのバージョンの gdbm で全てのフラグが有効とは限りません。 モジュール定数 open_flags はサポートされているフラグ文字 からなる文字列です。無効なフラグが指定された場合、例外 error が送出されます。

オプションの mode 引数は、新たにデータベースを作成しなければならない 場合に使われる Unix のファイルモードです。標準の値は 8 進数の 0666 です。

辞書型形式のメソッドに加えて、gdbm オブジェクトには以下のメソッド があります:

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

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

k = db.firstkey()
while k != None:
    print k
    k = db.nextkey(k)

reorganize( )
大量の削除を実行した後、gdbm ファイルの占めるスペースを 削減したい場合、このルーチンはデータベースを再組織化します。 この再組織化を使う以外に gdbm はデータベースファイルの 大きさを短くすることはありません; そうでない場合、削除された 部分のファイルスペースは保持され、新たな (キー、値の) ペアが追加 される際に再利用されます。

sync( )
データベースが高速モードで開かれていた場合、このメソッドは ディスクにまだ書き込まれていないデータを全て書き込ませます。

参考資料:

anydbmモジュール:
dbm 形式のデータベースへの汎用インタフェース。.
whichdbモジュール:
既存のデータベースがどの形式のデータベースか判定する ユーティリティモジュール。.
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。