Python Language


前書き

Shelveは、オブジェクトをファイルに格納するために使用されるPythonモジュールです。 shelveモジュールは、ディクショナリのようなAPIを使用して、ピクルすることができる任意のPythonオブジェクト用の永続ストレージを実装します。シェルブモジュールは、リレーショナルデータベースが過度に使用されている場合、Pythonオブジェクトのシンプルな永続ストレージオプションとして使用できます。シェルフは、辞書と同様に、キーでアクセスされます。値は、pickdbによって、anydbmによって作成および管理されるデータベースに書き込まれます。

備考

注:棚が自動的に閉じられることに頼らないでください。それをもはや必要としないときは常に明示的にclose()呼び出すか、context managerとしてshelve.open()を使います:

with shelve.open('spam') as db:
    db['eggs'] = 'eggs'

警告:

ので、 shelveモジュールによって支えられpickle 、信頼できないソースからのシェルフをロードするために安全ではありません。 pickleと同様に、シェルフを読み込むと任意のコードを実行できます。

制限事項

1 。使用するデータベースパッケージ(dbm.ndbmまたはdbm.gnuなど)の選択は、使用可能なインターフェイスによって異なります。したがって、dbmを使用して直接データベースを開くのは安全ではありません。データベースは、(残念ながら)使用されている場合はdbmの制限に従います。つまり、データベースに格納されているオブジェクトは(ピクルされた表現)はかなり小さくなければならず、まれにキーの衝突によりデータベースが更新を拒否する

2.シェルフモジュールは、シェルフオブジェクトに対する同時読み書きアクセスをサポートしていません。 (複数の同時読み込みアクセスは安全です。)書き込み用の棚が開いている場合は、他のプログラムで読み取りまたは書き込み用に開く必要はありません。これを解決するにはUnixファイルロックを使用することができますが、これはUnixバージョンによって異なり、使用されるデータベース実装に関する知識が必要です。

棚 関連する例