dbm — Unix「データベース」へのインターフェース—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/dbm
移動先:案内検索

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.gnudbm.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()がすべてのデータベースモジュールで使用できるようになりました。


バージョン3.8で変更:読み取り専用データベースからキーを削除すると、 KeyError ではなくデータベースモジュール固有のエラーが発生します。


キーと値は常にバイトとして保存されます。 これは、文字列が使用されると、保存される前に暗黙的にデフォルトのエンコーディングに変換されることを意味します。

これらのオブジェクトは、 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.

も参照してください

モジュールシェルフ
文字列以外のデータを格納する永続モジュール。


個々のサブモジュールについては、次のセクションで説明します。

dbm.gnu —GNUによるdbmの再解釈

ソースコード: :source: `Lib / dbm / gnu.py`



このモジュールは dbm モジュールと非常に似ていますが、代わりにGNUライブラリgdbmを使用していくつかの追加機能を提供します。 dbm.gnudbm.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データベースを閉じます。


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データベースを閉じます。


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拡張子のファイルが作成されます。

オプションのフラグ引数は次のとおりです。

価値

意味

'r'

読み取り専用で既存のデータベースを開く(デフォルト)

'w'

読み取りと書き込みのために既存のデータベースを開く

'c'

読み取りと書き込み用にデータベースを開き、データベースが存在しない場合は作成します

'n'

常に新しい空のデータベースを作成し、読み取りと書き込みのために開いてください

オプションの mode 引数は、ファイルのUnixモードであり、データベースを作成する必要がある場合にのみ使用されます。 デフォルトは8進数0o666です(一般的なumaskによって変更されます)。

警告

PythonのASTコンパイラにはスタックの深さの制限があるため、十分に大きい/複雑なエントリを持つデータベースをロードすると、Pythonインタープリタがクラッシュする可能性があります。

バージョン3.5で変更: open()は、フラグの値が'n'の場合、常に新しいデータベースを作成します。

バージョン3.8で変更:フラグ'r'で開かれたデータベースが読み取り専用になりました。 フラグ'r'および'w'で開くと、データベースが存在しない場合、データベースが作成されなくなりました。

collections.abc.MutableMapping クラスによって提供されるメソッドに加えて、dumbdbmオブジェクトは次のメソッドを提供します。

dumbdbm.sync()

ディスク上のディレクトリとデータファイルを同期します。 このメソッドは、Shelve.sync()メソッドによって呼び出されます。

dumbdbm.close()

dumbdbmデータベースを閉じます。