12.5。 dbm —Unix「データベース」へのインターフェース
ソースコード: :source: `Lib / dbm / __ init __。py`
dbm は、DBMデータベースのバリアント( dbm.gnu または dbm.ndbm )への汎用インターフェースです。 これらのモジュールのいずれもインストールされていない場合は、モジュール dbm.dumb の低速ですが単純な実装が使用されます。 Oracle BerkeleyDBへのサードパーティインターフェイスがあります。
- exception dbm.error
- サポートされている各モジュールで発生する可能性のある例外を含むタプル。最初の項目として dbm.error という名前の一意の例外があります。後者は、 dbm.error の場合に使用されます。発生します。
- dbm.whichdb(filename)
この関数は、使用可能ないくつかの単純なデータベースモジュール( dbm.gnu 、 dbm.ndbm 、または dbm.dumb )のどれを使用して与えられたファイル。
次のいずれかの値を返します。
None
ファイルが読み取れないか存在しないためにファイルを開くことができない場合。 ファイルの形式を推測できない場合は、空の文字列()。 または、
'dbm.ndbm'
や'dbm.gnu'
などの必要なモジュール名を含む文字列。
- dbm.open(file, flag='r', mode=0o666)
データベースファイルファイルを開き、対応するオブジェクトを返します。
データベースファイルがすでに存在する場合は、 whichdb()関数を使用してそのタイプを判別し、適切なモジュールを使用します。 存在しない場合は、インポートできる上記の最初のモジュールが使用されます。
オプションのフラグ引数は次のとおりです。
価値
意味
'r'
読み取り専用で既存のデータベースを開く(デフォルト)
'w'
読み取りと書き込みのために既存のデータベースを開く
'c'
読み取りと書き込み用にデータベースを開き、データベースが存在しない場合は作成します
'n'
常に新しい空のデータベースを作成し、読み取りと書き込みのために開いてください
オプションの mode 引数は、ファイルのUnixモードであり、データベースを作成する必要がある場合にのみ使用されます。 デフォルトは8進数
0o666
です(一般的なumaskによって変更されます)。
open()によって返されるオブジェクトは、辞書と同じ基本機能をサポートします。 キーとそれに対応する値の保存、取得、削除が可能で、 in 演算子とkeys()
メソッド、およびget()
と [ X267X]。
バージョン3.2での変更: get()
およびsetdefault()
がすべてのデータベースモジュールで使用できるようになりました。
キーと値は常にバイトとして保存されます。 これは、文字列が使用されると、保存される前に暗黙的にデフォルトのエンコーディングに変換されることを意味します。
これらのオブジェクトは、 with ステートメントでの使用もサポートしており、完了すると自動的に閉じます。
バージョン3.4で変更: open()によって返されるオブジェクトにコンテキスト管理プロトコルのネイティブサポートが追加されました。
次の例では、いくつかのホスト名と対応するタイトルを記録してから、データベースの内容を出力します。
import dbm
# Open database, creating it if necessary.
with dbm.open('cache', 'c') as db:
# Record some values
db[b'hello'] = b'there'
db['www.python.org'] = 'Python Website'
db['www.cnn.com'] = 'Cable News Network'
# Note that the keys are considered bytes now.
assert db[b'www.python.org'] == b'Python Website'
# Notice how the value is now in bytes.
assert db['www.cnn.com'] == b'Cable News Network'
# Often-used methods of the dict interface work too.
print(db.get('python.org', b'not present'))
# Storing a non-string key or value will raise an exception (most
# likely a TypeError).
db['www.yahoo.com'] = 4
# db is automatically closed when leaving the with statement.
個々のサブモジュールについては、次のセクションで説明します。
12.5.1。 dbm.gnu —GNUによるdbmの再解釈
ソースコード: :source: `Lib / dbm / gnu.py`
このモジュールは dbm モジュールと非常に似ていますが、代わりにGNUライブラリgdbm
を使用していくつかの追加機能を提供します。 dbm.gnu と dbm.ndbm によって作成されたファイル形式には互換性がないことに注意してください。
dbm.gnu モジュールは、GNUDBMライブラリへのインターフェースを提供します。 dbm.gnu.gdbm
オブジェクトは、キーと値が格納される前に常にバイトに変換されることを除いて、マッピング(辞書)のように動作します。 gdbm
オブジェクトを印刷してもキーと値は印刷されず、items()
およびvalues()
メソッドはサポートされていません。
- exception dbm.gnu.error
- I / Oエラーなどの dbm.gnu 固有のエラーで発生します。 KeyError は、誤ったキーの指定などの一般的なマッピングエラーに対して発生します。
- dbm.gnu.open(filename[, flag[, mode]])
gdbm
データベースを開き、gdbm
オブジェクトを返します。 filename 引数は、データベースファイルの名前です。オプションのフラグ引数は次のとおりです。
価値
意味
'r'
読み取り専用で既存のデータベースを開く(デフォルト)
'w'
読み取りと書き込みのために既存のデータベースを開く
'c'
読み取りと書き込み用にデータベースを開き、データベースが存在しない場合は作成します
'n'
常に新しい空のデータベースを作成し、読み取りと書き込みのために開いてください
データベースを開く方法を制御するために、次の追加文字をフラグに追加できます。
価値
意味
'f'
データベースを高速モードで開きます。 データベースへの書き込みは同期されません。
's'
同期モード。 これにより、データベースへの変更がすぐにファイルに書き込まれます。
'u'
データベースをロックしないでください。
すべてのフラグが
gdbm
のすべてのバージョンで有効であるとは限りません。 モジュール定数open_flags
は、サポートされているフラグ文字の文字列です。 無効なフラグが指定された場合、例外エラーが発生します。オプションの mode 引数は、ファイルのUnixモードであり、データベースを作成する必要がある場合にのみ使用されます。 デフォルトは8進数
0o666
です。辞書のようなメソッドに加えて、
gdbm
オブジェクトには次のメソッドがあります。- gdbm.firstkey()
このメソッドと nextkey()メソッドを使用して、データベース内のすべてのキーをループすることができます。 トラバーサルは
gdbm
の内部ハッシュ値によって順序付けられ、キー値によってソートされません。 このメソッドは開始キーを返します。
- gdbm.nextkey(key)
トラバーサルで key に続くキーを返します。 次のコードは、データベース
db
内のすべてのキーを出力しますが、それらすべてを含むリストをメモリ内に作成する必要はありません。k = db.firstkey() while k != None: print(k) k = db.nextkey(k)
- gdbm.reorganize()
多くの削除を実行し、
gdbm
ファイルによって使用されるスペースを縮小したい場合、このルーチンはデータベースを再編成します。gdbm
オブジェクトは、この再編成を使用する場合を除いて、データベースファイルの長さを短縮しません。 それ以外の場合、削除されたファイルスペースは保持され、新しい(キー、値)ペアが追加されたときに再利用されます。
- gdbm.sync()
データベースが高速モードで開かれている場合、このメソッドは未書き込みのデータを強制的にディスクに書き込みます。
- gdbm.close()
gdbm
データベースを閉じます。
12.5.2。 dbm.ndbm —ndbmに基づくインターフェース
ソースコード: :source: `Lib / dbm / ndbm.py`
dbm.ndbm モジュールは、Unixの「(n)dbm」ライブラリへのインターフェイスを提供します。 Dbmオブジェクトは、キーと値が常にバイトとして格納されることを除いて、マッピング(ディクショナリ)のように動作します。 dbm
オブジェクトを印刷してもキーと値は印刷されず、items()
およびvalues()
メソッドはサポートされていません。
このモジュールは、「クラシック」ndbmインターフェースまたはGNUGDBM互換性インターフェースで使用できます。 Unixでは、 configure スクリプトは、このモジュールの構築を簡素化するために適切なヘッダーファイルを見つけようとします。
- exception dbm.ndbm.error
- dbm.ndbm 固有のエラー(I / Oエラーなど)で発生します。 KeyError は、誤ったキーの指定などの一般的なマッピングエラーに対して発生します。
- dbm.ndbm.library
- 使用されている
ndbm
実装ライブラリの名前。
- dbm.ndbm.open(filename[, flag[, mode]])
dbmデータベースを開き、
ndbm
オブジェクトを返します。 filename 引数は、データベースファイルの名前です(.dir
または.pag
拡張子なし)。オプションの flag 引数は、次のいずれかの値である必要があります。
価値
意味
'r'
読み取り専用で既存のデータベースを開く(デフォルト)
'w'
読み取りと書き込みのために既存のデータベースを開く
'c'
読み取りと書き込み用にデータベースを開き、データベースが存在しない場合は作成します
'n'
常に新しい空のデータベースを作成し、読み取りと書き込みのために開いてください
オプションの mode 引数は、ファイルのUnixモードであり、データベースを作成する必要がある場合にのみ使用されます。 デフォルトは8進数
0o666
です(一般的なumaskによって変更されます)。辞書のようなメソッドに加えて、
ndbm
オブジェクトは次のメソッドを提供します。- ndbm.close()
ndbm
データベースを閉じます。
12.5.3。 dbm.dumb —ポータブルDBMの実装
ソースコード: :source: `Lib / dbm / dumb.py`
ノート
dbm.dumb モジュールは、より堅牢なモジュールが利用できない場合の dbm モジュールの最後の手段としてのフォールバックとして意図されています。 dbm.dumb モジュールは速度を重視して記述されておらず、他のデータベースモジュールほど頻繁には使用されていません。
dbm.dumb モジュールは、完全にPythonで記述された永続的な辞書のようなインターフェイスを提供します。 dbm.gnu などの他のモジュールとは異なり、外部ライブラリは必要ありません。 他の永続的なマッピングと同様に、キーと値は常にバイトとして保存されます。
モジュールは以下を定義します:
- exception dbm.dumb.error
- dbm.dumb 固有のエラー(I / Oエラーなど)で発生します。 KeyError は、誤ったキーの指定などの一般的なマッピングエラーに対して発生します。
- dbm.dumb.open(filename[, flag[, mode]])
dumbdbm
データベースを開き、dumbdbmオブジェクトを返します。 filename 引数は、データベースファイルのベース名です(特定の拡張子はありません)。 dumbdbmデータベースが作成されると、.dat
および.dir
拡張子のファイルが作成されます。オプションの flag 引数は、
'c'
および'n'
値のセマンティクスのみをサポートします。 他の値は、デフォルトでデータベースが常に更新のために開かれ、存在しない場合は作成されます。オプションの mode 引数は、ファイルのUnixモードであり、データベースを作成する必要がある場合にのみ使用されます。 デフォルトは8進数
0o666
です(一般的なumaskによって変更されます)。バージョン3.5で変更: open()は、フラグの値が
'n'
の場合、常に新しいデータベースを作成します。collections.abc.MutableMapping クラスによって提供されるメソッドに加えて、
dumbdbm
オブジェクトは次のメソッドを提供します。- dumbdbm.sync()
ディスク上のディレクトリとデータファイルを同期します。 このメソッドは、
Shelve.sync()
メソッドによって呼び出されます。
- dumbdbm.close()
dumbdbm
データベースを閉じます。