Symfoware

Symfowareについての考察blog

Python 軽量ドキュメントデータベース TinyDB

私が選ぶ2015年の”新しい”Pythonモジュール トップ5

こちらで紹介されている「TinyDB」
http://tinydb.readthedocs.org/en/latest/index.html

Pure Pythonなドキュメントデータベースなようです。
インストールして使ってみます。


インストール



インストールはeasy_installで行いました。


$ sudo easy_install tinydb



バージョン3.1.2がインストール出来ました。



データの登録と検索



こちらを参考に、使い方を調べてみます。
http://tinydb.readthedocs.org/en/latest/getting-started.html

まず、データベースの作成とデータ登録を行ってみます。


  1. from tinydb import TinyDB, Query
  2. # データベースオープン 引数はファイル名
  3. db = TinyDB('db.json')
  4. # insertでデータを登録
  5. # 辞書型のオブジェクトをそのまま渡せばOK
  6. db.insert({'type': 'apple', 'count': 7})
  7. db.insert({'type': 'peach', 'count': 3})
  8. # db.all()で登録しているデータを全て出力
  9. print db.all()




実行結果


$ python sample.py
[{u'count': 7, u'type': u'apple'}, {u'count': 3, u'type': u'peach'}]





次に、Queryオブジェクトを使用してデータを検索してみます。


  1. from tinydb import TinyDB, Query
  2. # データベースオープン 引数はファイル名
  3. db = TinyDB('db.json')
  4. # Queryオブジェクトを生成
  5. Fruit = Query()
  6. # 'type'が'peach'の値を検索
  7. print db.search(Fruit.type == 'peach')
  8. # countが5より大きい値を検索
  9. print db.search(Fruit.count > 5)




実行結果


$ python sample.py
[{u'count': 3, u'type': u'peach'}]
[{u'count': 7, u'type': u'apple'}]





検索結果はリスト型で帰ってきます。
一行ずつ結果をフェッチしたい場合は、素直にforすれば良いようです。


  1. from tinydb import TinyDB, Query
  2. # データベースオープン 引数はファイル名
  3. db = TinyDB('db.json')
  4. # Queryオブジェクトを生成
  5. Fruit = Query()
  6. # countが1より大きい値を検索
  7. for row in db.search(Fruit.count > 1):
  8.     print row




実行結果


$ python sample.py
{u'count': 7, u'type': u'apple'}
{u'count': 3, u'type': u'peach'}







データの更新と削除



データの更新と削除を行ってみます。
まずは更新。


  1. from tinydb import TinyDB, Query
  2. # データベースオープン 引数はファイル名
  3. db = TinyDB('db.json')
  4. # Queryオブジェクトを生成
  5. Fruit = Query()
  6. # 'type'が'apple'のcountを10に変更
  7. db.update({'count': 10}, Fruit.type == 'apple')
  8. # 結果確認
  9. print db.all()




実行結果


$ python sample.py
[{u'count': 10, u'type': u'apple'}, {u'count': 3, u'type': u'peach'}]





データの削除。


  1. from tinydb import TinyDB, Query
  2. # データベースオープン 引数はファイル名
  3. db = TinyDB('db.json')
  4. # Queryオブジェクトを生成
  5. Fruit = Query()
  6. # countが5より小さいデータを削除
  7. db.remove(Fruit.count < 5)
  8. # 結果を確認
  9. print db.all()




実行結果


$ python sample.py
[{u'count': 10, u'type': u'apple'}]





全てのデータを削除。


  1. # データベースオープン 引数はファイル名
  2. db = TinyDB('db.json')
  3. # 全てのデータを削除
  4. db.purge()
  5. # 結果を確認
  6. print db.all()




実行結果


$ python sample.py
[]





これはお手軽に使えて便利です。





テーブルの指定



未指定の場合は_defaultというテーブルにデータが登録されますが、
任意にテーブルを作成することもできます。


  1. from tinydb import TinyDB, Query
  2. # データベースオープン 引数はファイル名
  3. db = TinyDB('db.json')
  4. # テーブルを作成
  5. table_1 = db.table('table_1')
  6. # データ登録
  7. table_1.insert({'value':'table_1_value'})
  8. # 2つめのテーブルを作成
  9. table_2 = db.table('table_2')
  10. # データ登録
  11. table_2.insert({'value':'table_2_value'})
  12. # 各々、結果を確認
  13. print table_1.all()
  14. print '-' * 10
  15. print table_2.all()




実行結果


$ python sample.py
[{u'value': u'table_1_value'}]
----------
[{u'value': u'table_2_value'}]




この時、出力されたdb.jsonはこのようになっていました。


  1. {"_default": {}, "table_2": {"1": {"value": "table_2_value"}}, "table_1": {"1": {"value": "table_1_value"}}}






関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2016/02/02(火) 21:41:22|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Python TinyDB Custom Storageの作り方 | ホーム | Ruby MechanizeでNTLM Authentication>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
https://symfoware.blog.fc2.com/tb.php/1830-f333da42
この記事にトラックバックする(FC2ブログユーザー)