3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

図解で、Cloudant (NoSQL) の Python CRUD, 2021

Last updated at Posted at 2021-08-14

図解で、Cloudant (NoSQL) の Python CRUD

IBM Cloud の mBaaS(NoSQL/ドキュメントデータベース) といえば IBM Cloudant が候補になる。2021年の最新バージョンでの PythonのCRUD(作成/読み込み/更新/削除)サンプルコードを残しておく。

動作確認した構成

GCPのLinuxサーバー側で実行するpythonスクリプトが、Cloudantデータベースを編集する。
image.png

Cloudantお薦めの理由

クレジットカード登録不要のライトアカウント(無料)で、WEBアプリ/モバイルアプリのデータベースとして利用できる。その上、マネージドサービスなので、データベースサーバーの準備やインストールが不要で、すぐにDBテーブル作成できる。無料範囲は、スループット性能が1秒あたりの読取数20/書込数10、そして容量上限 1GB。1GBは少ない?サイズが大きな画像ファイルなどは、IBM Object Storage 25GBまで無料を併用し、Cloudantには全角テキスト300文字のドキュメントなら20万件以上保存できる。

Cloudant ダッシュボード

データベース、ドキュメント、フィールド(JSON)を管理ポータルで操作(作成/変更/削除)できる。
image.png

事前準備(2つ)

事前準備1;IBM Cloud 管理ポータルで「サービス資格情報」を取得する。
image.png

事前準備2;python で cloudant を使うには、cloudant クライアントライブラリーが必要。pipでインストールする。

$ pip install cloudant

インストールできたか、cloudant=2.3.1の様なバージョンが表示されることを確認する。

$ pip freeze
cloudant=2.3.1

python サンプルコード(CRUD)

ライブラリ定義とCloudantアクセス認証

sample.py
# !/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 管理ポータルのサービス資格情報のユーザ名とパスワードを入力する。
image.png

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?