図解で、Cloudant (NoSQL) の Python CRUD
IBM Cloud の mBaaS(NoSQL/ドキュメントデータベース) といえば IBM Cloudant が候補になる。2021年の最新バージョンでの PythonのCRUD(作成/読み込み/更新/削除)サンプルコードを残しておく。
動作確認した構成
GCPのLinuxサーバー側で実行するpythonスクリプトが、Cloudantデータベースを編集する。
Cloudantお薦めの理由
クレジットカード登録不要のライトアカウント(無料)で、WEBアプリ/モバイルアプリのデータベースとして利用できる。その上、マネージドサービスなので、データベースサーバーの準備やインストールが不要で、すぐにDBテーブル作成できる。無料範囲は、スループット性能が1秒あたりの読取数20/書込数10、そして容量上限 1GB。1GBは少ない?サイズが大きな画像ファイルなどは、IBM Object Storage 25GBまで無料を併用し、Cloudantには全角テキスト300文字のドキュメントなら20万件以上保存できる。
Cloudant ダッシュボード
データベース、ドキュメント、フィールド(JSON)を管理ポータルで操作(作成/変更/削除)できる。
事前準備(2つ)
事前準備1;IBM Cloud 管理ポータルで「サービス資格情報」を取得する。
事前準備2;python で cloudant を使うには、cloudant クライアントライブラリーが必要。pipでインストールする。
$ pip install cloudant
インストールできたか、cloudant=2.3.1の様なバージョンが表示されることを確認する。
$ pip freeze
cloudant=2.3.1
python サンプルコード(CRUD)
ライブラリ定義とCloudantアクセス認証
# !/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
import os
import sys
from cloudant.client import Cloudant
from cloudant.error import CloudantException
from cloudant.result import Result, ResultByKey
# DBアクセス認証
serviceUsername = "apikey-v2-2v25*********************************ycs6yl4"
servicePassword = "bd2*************************bca6"
serviceURL = "https://apikey-v2-2v25*****-bluemix.cloudantnosqldb.appdomain.cloud"
def mydb_read():
# データを取得する
result_collection = Result(myDB_kano.all_docs, include_docs=True)
for data_json in result_collection:
print( data_json )
def mydb_append(strTable, strComment):
# 新しいドキュメントを作成する
objToday = datetime.datetime.today()
strTemp = str(objToday.year) + str(objToday.month) + str(objToday.day) \
+ str(objToday.hour) + str(objToday.minute)
jsonDocument = {
"_id": ":".join(("docid", strTemp)),
"table": strTable,
"comment": strComment
}
newDocument = myDB_kano.create_document(jsonDocument)
if __name__ == '__main__':
# DBに接続する
client = Cloudant(serviceUsername, servicePassword, url=serviceURL)
client.connect()
myDB_kano = client.create_database("first-db")
print('Cloudant DB操作 メニュー')
print('[1] 新規ドキュメント作成')
print('[2] ドキュメント読取')
print('[3] ドキュメント更新')
print('[4] ドキュメント削除')
inputWord = input('>>> ')
if inputWord == '1':
inputWord = input('データを入力 > ')
mydb_append('chat', inputWord) # DB内のドキュメント書き込み
elif inputWord == '2':
mydb_read() # DB内のドキュメント読み込み
elif inputWord == '3':
inputDocid = input('docidを入力 > ')
doc_exists = 'docid:' + inputDocid in myDB_kano
if doc_exists:
myDoc = myDB_kano[ 'docid:' + inputDocid ]
inputWord = input('データを入力 > ')
myDoc['comment'] = inputWord # DB内のドキュメント変更
myDoc.save()
else:
print('Docid ' + inputDocid + ' は存在しません。')
elif inputWord == '4':
inputDocid = input('docidを入力 > ')
doc_exists = inputDocid in myDB_kano
if doc_exists:
myDoc = myDB_kano[ 'docid:' + inputDocid ]
myDoc.delete() # DB内のドキュメント削除
else:
print('Docid ' + inputDocid + ' は存在しません。')
実行例
pythonスクリプトを実行するとメニューが表示されるので、該当するキー入力してenter。
$ python3 sample.py
Cloudant DB操作 メニュー
[1] 新規ドキュメント作成
[2] ドキュメント読取
[3] ドキュメント更新
[4] ドキュメント削除
>>> 2
{'id': 'docid:20218132038', 'key': 'docid:20218132038', 'value': {'rev': '2-e36a3b4b73af1ef72ef787ef98e4c22b'}, 'doc': {'_id': 'docid:20218132038', '_rev': '2-e36a3b4b73af1ef72ef787ef98e4c22b', 'table': 'chat', 'comment': 'データを書き替えする。これに。'}}
{'id': 'docid:2021814022', 'key': 'docid:2021814022', 'value': {'rev': '1-513c708d536ab8247d677902898e241c'}, 'doc': {'_id': 'docid:2021814022', '_rev': '1-513c708d536ab8247d677902898e241c', 'table': 'chat', 'comment': '最初のデータ(ドキュメント)を追加する'}}
まとめ
- IBM Cloud の mBaaS(NoSQL/ドキュメントデータベース) 候補は Cloudant 。
- 2021時点 PythonのCRUD(作成/読み込み/更新/削除)サンプルコードを記載。
- お薦め:クレジットカード登録不要で、WEBアプリのデータベースとして利用できるぞ。
Cloudantダッシュボードで、クレデンシャルを再要求された場合
一定時間操作しないと、ユーザ名とパスワードを要求される場合がある。Cloudantダッシュボードにログインする場合は、IBM Cloud 管理ポータルのサービス資格情報のユーザ名とパスワードを入力する。