Python学習【365日チャレンジ!】144日目のマスターU(@Udemy11)です。
SQLiteはデータベースをファイルにして扱うデータベースなので、MySQLのようにローカルホストを必要とせず、Pythonistaでも簡単に使うことができました。
今回学習するDBMも簡易なファイルを作成して扱うデータベースなので、Pythonistaでコードを書いてみることにしました。
昨日の復習
昨日、一昨日と、SQLステートメントを自動で実行してSQLiteやMySQLなどを扱うことができるSQLAlchemyを学習しました。
オブジェクトを生成してオブジェクトがデータベースの操作をするという感じのオブジェクト指向のプログラミングでしたが、コードを1行書き換えるだけで、SQLiteやMySQLなどのデータベースを切り替えて扱うことができました。
まずはメモリーで動作確認をしたほうがいいとのことでしたが、汎用性の高い使い方ができました。
SQLAlchemyの詳細はこちらの記事をごらんください。
今日は、DBMについて学習しましょう!
DBMとは
Python公式ドキュメントによると、DBM(DataBase Management)は【Unix”データベース”へのインタフェース】とあり、UNIXやLinuxで以前から使われています。
テーブルでデータを格納するのではなく、key
とvalue
を使う辞書型データで格納します。
DBMは、リレーショナルデータベースに比べると拡張性は低いものの、key
検索が高速にできるので、SQLiteやMySQLを使うまでもない簡単なデータを扱うのに適しています。
それでは実際にDBMをさわっていきましょう。
ファイルのように扱う
DBMはPythonの標準ライブラリに含まれているので、新たにインストールする必要はなく、インポートして使うことができます。
また、テキストファイルを開いて使うように、with
ステートメントで扱うことができます。
それではコードを書いていきましょう。
import dbm
with dbm.open('cache', 'c') as db:
db['id1'] = 'Mark'
db['id2'] = 'Kate'
with dbm.open('cache', 'r') as db:
for i, n in db.items():
print(i, n)
出力結果
b'id1' b'Mark'
b'id2' b'Kate'
Pythonistaだとこのコードでもエラーが発生せずに、保存されているkey
とvalue
が表示されました。
一方、このコードをPycharmで実行してみると、db
がイテラブルオブジェクトではないというタイプエラーが起こりました。
原因はよくわからないのですが、Pycharmではfor
ループで回して使うことはできないようです。
保存されるファイルの違い?
DBMを使ってPycharmでデータベースを作成したときは、cache.db
というファイルが生成されます。
一方、Pythonistaの場合は、下記のような3つのファイルが生成されます。
もしかしたら、このことが関係しているのかもしれませんが、ネットで原因を探しても答えを見つけることはできませんでした。
数字は扱えない
ちなみにDBMでは数字(integer)を扱うことはできません。
これはPythonistaでもPycharmでも同じようにエラーが返されます。
id3
に数字の3
を入れようとしてエラーが返されています。
使いみちは?
文字列しか扱えないので、どんな使いみちがあるのかよくわかりませんが、酒井さんの講座では、キャッシュとして簡易なデータを一時保存しておく場合などに使うと解説されていました。
とはいえ、そのデータに数字が含まれていれば使うことができないので、実際に活用している場面に出くわさないときちんと理解することは難しいかと思います。
今日は、他のリレーショナルデータベースとは少し違った使い方をするDBMについて学習しましたが、また新しいことに気づいた時に追加情報を加えたいと思います。
それでは、明日もGood Python!