「NoSQLをPythonで利用したい」
「ドキュメント指向のデータベースを導入したい」
「事情により、MongoDBを利用することができない・・・」
このような場合には、TinyDBがオススメです。
この記事では、NoSQLデータベースTinyDBについて解説しています。
本記事の内容
- TinyDBとは?
- TinyDBのシステム要件
- TinyDBのインストール
- TinyDBの動作確認
それでは、上記に沿って解説していきます。
TinyDBとは?
TinyDBとは、ドキュメント指向のデータベースのことです。
ドキュメント指向のデータベースと言えば、MongoDBがあります。
MongoDBがインストールできるなら、TinyDBを使うまでもありません。
MongoDBのインストールについては、次の記事で解説しています。
ただし、そこまでは必要はないという場合もあるでしょう。
ちょっとしたアプリであれば、MongoDBはオーバースペックと言えます。
それに、MongoDBをインストールする権限がないこともあり得ます。
それでも、ドキュメント指向のデータベースを利用したいケースもあるでしょう。
そんな場合には、TinyDBが効果的です。
TinyDBは、Pythonのみで書かれています。
そのため、TinyDBの導入を簡単に行うことができます。
Pythonさえ動けば、基本的にはどこでもインストール可能ですからね。
以上、TinyDBについて説明しました。
次は、TinyDBのシステム要件を説明します。
TinyDBのシステム要件
現時点(2022年8月)でのTinyDBの最新バージョンは、4.7.0となります。
この最新バージョンは、2022年2月20日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
サポート対象となるPythonのバージョンは、以下となっています。
- Python 3.6
- Python 3.7
- Python 3.8
- Python 3.9
- Python 3.10
以下のPython公式開発サイクルとは、Python 3.6だけが異なります。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
Python 3.6のサポートは、2021年で終了しています。
そのため、ここではPython 3.7以降の利用を推奨します。
以上、TinyDBのシステム要件を説明しました。
次は、TinyDBのインストールを説明します。
TinyDBのインストール
検証は、次のバージョンのPythonで行います。
$ python -V Python 3.10.2
まずは、現状のインストール済みパッケージを確認しておきます。
$ pip list Package Version ---------- ------- pip 22.2.2 setuptools 63.4.2 wheel 0.36.2
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、TinyDBのインストールです。
TinyDBのインストールは、以下のコマンドとなります。
pip install tinydb
TinyDBのインストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。
$ pip list Package Version ---------- ------- pip 22.2.2 setuptools 63.4.2 tinydb 4.7.0 wheel 0.36.2
TinyDBが依存するパッケージは、ありません。
そのため、TinyDBは既存環境に容易に導入可能です。
以上、TinyDBのインストールを説明しました。
次は、TinyDBの動作確認を説明します。
TinyDBの動作確認
TinyDBの動作確認を行います。
それぞれ以下の操作を確認していきます。
- 挿入(INSERT)
- 照会(SELECT)
- 更新(UPDATE)
- 削除(DELETE)
挿入(INSERT)
本来データベースを扱うなら、データベースの作成が事前に必要です。
さらには、テーブル作成も必要になります。
TinyDBの場合は、挿入の処理でそれらをまとめて行います。
そのためのコードが、以下。
from tinydb import TinyDB file_path = "db.json" db = TinyDB(file_path) users = db.table('users') users.insert({'id': 1, 'name': '山田太郎', 'age': 20}) users.insert({'id': 2, 'name': '佐藤次郎', 'age': 30}) users.insert({'id': 3, 'name': '田中三郎', 'age': 40}) users.insert({'id': 4, 'name': '中村四郎', 'age': 50}) users.insert({'id': 5, 'name': '野口五郎', 'age': 66})
上記を実行すると、「db.json」が作成されます。
内容を確認すると、次の内容となります。
db.json
{"users": {"1": {"id": 1, "name": "\u5c71\u7530\u592a\u90ce", "age": 20}, "2": {"id": 2, "name": "\u4f50\u85e4\u6b21\u90ce", "age": 30}, "3": {"id": 3, "name": "\u7530\u4e2d\u4e09\u90ce", "age": 40}, "4": {"id": 4, "name": "\u4e2d\u6751\u56db\u90ce", "age": 50}, "5": {"id": 5, "name": "\u91ce\u53e3\u4e94\u90ce", "age": 66}, "6": {"id": 1, "name": "\u5c71\u7530\u592a\u90ce", "age": 20}, "7": {"id": 2, "name": "\u4f50\u85e4\u6b21\u90ce", "age": 30}, "8": {"id": 3, "name": "\u7530\u4e2d\u4e09\u90ce", "age": 40}, "9": {"id": 4, "name": "\u4e2d\u6751\u56db\u90ce", "age": 50}, "10": {"id": 5, "name": "\u91ce\u53e3\u4e94\u90ce", "age": 66}}}
このままだとわかりにくいので、JSONビューワーで確認しましょう。
意図した通りにデータが登録されています。
「users」はテーブルに該当します。
この場合、「db.json」がデータベースに該当することになります。
照会(SELECT)
照会には、2つのパターンがあります。
- Queryモジュールを利用する
- whereモジュールを利用する
それぞれのコードは、以下。
Queryモジュールを利用する
from tinydb import TinyDB from tinydb import Query file_path = "db.json" db = TinyDB(file_path) users = db.table('users') User = Query() result_1 = users.search(User.name == '田中三郎') print("結果その1") print(result_1) result_2 = users.search((User.age >= 20) & (User.age <= 30)) print("結果その2") print(result_2)
whereモジュールを利用する
from tinydb import TinyDB from tinydb import where file_path = "db.json" db = TinyDB(file_path) users = db.table('users') result_1 = users.search(where('name') == '田中三郎') print("結果その1") print(result_1) result_2 = users.search((where('age') >= 20) & (where('age') <= 30)) print("結果その2") print(result_2)
実行した結果は、全く同じ結果となります。
結果その1 [{'id': 3, 'name': '田中三郎', 'age': 40}] 結果その2 [{'id': 1, 'name': '山田太郎', 'age': 20}, {'id': 2, 'name': '佐藤次郎', 'age': 30}]
使いやすい方を選びましょう。
更新(UPDATE)
基本的な構文は、以下となります。
db.update(your_operation(arguments), query)
query部分は、Queryかwhereのどちらかを設定します。
ここでは、whereモジュールを利用するパターンを載せておきます。
from tinydb import TinyDB from tinydb import where file_path = "db.json" db = TinyDB(file_path) users = db.table('users') users.update({'age': 35}, where('id') == 2)
上記を実行すると、「db.json」の内容が一部更新されます。
削除(DELETE)
削除は、条件を付けるだけです。
ここでも、whereモジュールを利用するパターンを載せておきます。
from tinydb import TinyDB from tinydb import where file_path = "db.json" db = TinyDB(file_path) users = db.table('users') users.remove(where('id') == 4)
上記を実行すると、1レコード(オブジェクト)が消えました。
以上、TinyDBの動作確認を説明しました。