tinydbはmongodbのようなドキュメント型データベースです。
特徴として、mongoのようにサーバーを立てる必要がありません。
web APIを叩いたりしていると、
jsonファイルを楽に扱えたらなあ、と思うことがあります。
また、簡単なプロトタイプアプリを作る場合、
データスキーマを決めたくない場合があります。
tinydbはjsonファイルとドキュメントデータベースの中間のようなデータベースです。
基本はjsonファイルですが、
サーチやインサートなどDBライクに操作でき便利です。
導入
pip install tinydb
使ってみる
テーブルは作成しなくても大丈夫です。
勉強のため、テーブル作成をやってみます。
from tinydb import TinyDB db = TinyDB("db.json") # インメモリーで使いたい時は # from tinydb.storages import MemoryStorage # db = TinyDB(stroage = MemoryStorage) table = db.table('new_table') table.insert({"data":"value"}) table.all() #[{"data":"value"}] # テーブルを全て消す db.purge_tables()
データの作成
基本的には辞書型をinsertするだけです。
しかし、複数の辞書をいっぺんに投入したい場合があります。
当然forで回してインサートではなく、
マルチプルインサートしましょう。
(速度が圧倒的に違う)
from tinydb import TinyDB db = TinyDB("db.json") # 一つのみ db.insert(辞書データ) # 複数 db.insert_multiple([辞書データ,辞書データ・・・])
注意点として、リストの中に辞書型以外があってもインサートできてしまいます。
こんなの=>[{},0,{}]
しかし、辞書以外が混ざるとエラーでdbが開けなくなります。
データの検索
クエリオブジェクトを使って行えます。
いちいち、メモリに展開する記述がいらないので非常に楽です。
from tinydb import TinyDB,Query db = TinyDB("db.json") qwy = Query() # 全て db.all() db.search(qwy.データのアトリビュート=='検索値') # {k1:{k2:value}}みたいなデータのvalueが欲しい時は # qwy.k1.k2 == valueでアクセス可能 # qwy[k1][k2]とかも可能
更にqwy.アトリビュート.match(正規表現)
や
qwy.アトリビュート.search(正規表現)
で、
正規表現を使用できます。
リスト内の値で検索する場合({k:[1,2,3]}みたいな場合)
qwy.k.any([検索値のリスト])
で一つでも引っかかれば返せます。
(anyではなくallにすると全一致になります)
データの更新
更新、削除も簡単です。
# 更新 db.update({更新したいkey:更新後のvalue},qwr.アトリビュート==値) # update set 更新したいkey = 更新後のvalue where アトリビュート == 値;と同じ # 削除 db.remove(qwr.アトリビュート==値)