TinyDBは、Pythonで使える軽量な NoSQLです。
OSにデータベース・エンジンをインストールする必要もなく、pipで TinyDBのライブラリをインストールすれば単体で動作し、データも1つの JSONファイルに保存されるため扱いも容易です。
TinyDBのインストール
pipでインストール
$ pip install tinydb
Anacondaでインストール
$ conda install -c conda-forge tinydb
データベースの初期化
最初に必要なモジュールをインポートします。
次に、データベースのファイル名を指定してTinyDB
のインスタンスを作成します。
from tinydb import TinyDB, Query
db = TinyDB("db.json")
上のコードを実行すると、カレントディレクトリに`db.json`ファイルが作成されます。TinyDBではデータをJSONファイルで管理します。
ドキュメントの追加
ドキュメントはinsert
関数で追加できます。ドキュメントはRDBで言うところのレコードのイメージです。
db.insert({"id": 100, "name": "山田", "age": 10})
db.insert({"id": 110, "name": "鈴木", "age": 50})
上のコードを実行すると、データベースのJSONファイル(db.json)に次のような内容が書き込まれ、追加したドキュメントが保存されます。
{
"_default": {
"1": {
"id": 100,
"name": "山田",
"age": 10
},
"2": {
"id": 110,
"name": "鈴木",
"age": 50
}
}
}
複数ドキュメントをまとめて追加
まとめて複数のドキュメントを追加する場合はinsert_multiple
関数を使います。
db.insert_multiple([
{"id": 100, "name": "山田", "age": 10},
{"id": 110, "name": "鈴木", "age": 50}])
ドキュメントの削除
Query
インスタンスで削除条件を指定してドキュメントを削除します。
query = Query()
db.remove(query.id == 100)
全ドキュメントの削除
データベース内の全ドキュメントを削除する場合は、truncate
関数を使用します。
db.truncate()
ドキュメントの更新
更新はupdate
関数で行います。1つ目の引数に更新する内容、2つ目の引数に更新するドキュメントの条件をクエリで指定します。
query = Query()
db.update({"age": 30, "address": "TOKYO"}, query.id == 100)
上のコードを実行すると、`id`属性が「100」のドキュメントが指定した値で更新されます。更新前に存在しなかった`address`属性は追加されます。
{
"_default": {
"1": {
"id": 100,
"name": "山田",
"age": 30,
"address": "TOKYO"
},
"2": {
"id": 110,
"name": "鈴木",
"age": 50
}
}
}
キーの削除
ドキュメント内の一部のキー(属性)を削除する場合は、delete
フィールドに削除したいキーを指定してupdate
関数の引数に渡します。
from tinydb import TinyDB, Query
from tinydb.operations import delete
query = Query()
db.update(delete('age'), query.id == 100)
コードを実行すると次のような結果になります。
id=100
のドキュメントからage
キーが作成されているのが分かります。
{
"_default": {
"1": {
"id": 100,
"name": "山田"
},
"2": {
"id": 110,
"name": "鈴木",
"age": 50
}
}
}
テーブルで複数の情報を管理
TinyDBでは「テーブル」を複数作成できます。RDBでもテーブルを分けて必要すると思いますが、それと同じ感覚です。
以下は、ユーザー情報と、テストのスコアを管理するテーブルを作成し、それぞれのテーブルにドキュメントを追加するサンプルコードです。
tbl1 = db.table('users')
tbl1.insert({"id": 100, "name": "山田", "age": 10})
tbl1.insert({"id": 110, "name": "鈴木", "age": 50})
tbl2 = db.table('scores')
tbl2.insert({"id": 100, "subject": "数学", "score": 80})
tbl2.insert({"id": 100, "subject": "国語", "score": 60})
tbl2.insert({"id": 110, "subject": "数学", "score": 100})
このコードを実行すると、DBのJSONファイルには次のように書き込まれます。
{
"users": {
"1": {
"id": 100,
"name": "山田",
"age": 10
},
"2": {
"id": 110,
"name": "鈴木",
"age": 50
}
},
"scores": {
"1": {
"id": 100,
"subject": "数学",
"score": 80
},
"2": {
"id": 100,
"subject": "国語",
"score": 60
},
"3": {
"id": 110,
"subject": "数学",
"score": 100
}
}
}
特にテーブル名を指定しない場合、TinyDBでは `_default`という名前のテーブルが使用され、データベースオブジェクトに対して行われた操作は `_default`テーブルに格納されます。
そもそも、TinyDBはデータを1つのJSONファイルで管理するため、テーブルで分けるのではなく、ファイル自体を分けてすべて _default
テーブルを使うのも1つの手ですね。
テーブル一覧の取得
データベース内のすべてのテーブルの名前を含むリストを取得できます。
db.tables()
テーブルの削除
データベースから指定した名前のテーブルを削除するには、drop_table
関数を使います。
db.drop_table('table_name')
すべてのテーブルを削除する場合は`drop_tables()`関数を使用します。
db.drop_tables()
0 件のコメント:
コメントを投稿