【pykintone】Pythonからkintoneに対してレコード操作する方法まとめ

【pykintone】Pythonからkintoneに対してレコード操作する方法まとめ
                 
最終更新日から90日以上経過しています。

Pythoneからkintoneに接続する際のライブラリとしてpykintoneがあります。

リポジトリのReadmeやdeveloper networkでセットアップ等の説明もあります。

が、CRUD(レコードの取得、作成、更新、削除)操作まで説明されている記事が見つからなかったので、まとめてみました

環境、及びセットアップ

環境は、

Python 3.6.5

です。

セットアップに関しては、前述の通りリポジトリのReadmeや、developer networkの記事で充分かと思います。

各レコード操作の方法

レコード取得、作成、更新、削除の方法を記載する前に、今回使用するアプリの構成から。

使用するアプリの構成

といっても各レコード操作が確認できれば良いのでフィールドは2だけ

フィールドコードはフィールド名と同様です。

このアプリを対象に各レコード操作を確認していきます。

レコード取得

ほぼほぼGitHubでサンプルとして公開されているソースと同様ですが。

import pykintone
from pykintone import model

account = pykintone.load("account.yml")
app = account.app()
result = app.select("order by $id asc")
if result.ok:
    records = result.records
    for record in records:
        print(record["文字列"]["value"] + ", " + record["数値"]["value"])

 

ポイントとしては

app.select(“クエリ文字列”)でクエリを指定する

app.select()の戻り値(=result)にokプロパティが設定されていれば正常と判定

レコードの値はブラット記法でアクセス可能

という所でしょうか。

また、エラーハンドリングは以下の様に、errordetailプロパティが設定されるので、そこから参照します。

試しにapp.select()に存在しないフィールドを使用したクエリを設定してみましょう。

result = app.select("order by 存在しないフィールド asc")
if result.ok:
    records = result.records
    for record in records:
        print(record["文字列"]["value"] + ", " + record["数値"]["value"])
else:
    print("▼▼▼発生したエラー▼▼▼")
    print(result.error)
    print("▲▲▲発生したエラー▲▲▲")
    print("▼▼▼発生したエラーの詳細▼▼▼")
    print(result.detail)
    print("▲▲▲発生したエラーの詳細▲▲▲")
▼▼▼発生したエラー▼▼▼
Error(message='入力内容が正しくありません。', id='sOTZsq8jcR75Wk9Oea7V', code='CB_VA01')
▲▲▲発生したエラー▲▲▲
▼▼▼発生したエラーの詳細▼▼▼
{'query': {'messages': ['クエリ記法が間違っています。']}}
▲▲▲発生したエラーの詳細▲▲▲

エラーが確認できました。

レコード作成

対象アプリと対応するモデルを使用して登録するイメージのようです。

import pykintone
from pykintone import model

# 対象アプリモデル
class Sample(model.kintoneModel):
    def __init__(self):
        super(Sample, self).__init__()
        self.文字列=""
        self.数値=0

account = pykintone.load("account.yml")
app = account.app()

# 新規登録するレコードオブジェクトの設定、及び登録処理実行
record = Sample()
record.文字列 = "pykintoneから作成しました"
record.数値 = 9999
app.create(record)

# レコードの取得
result = app.select("order by $id asc")
if result.ok:
    records = result.records
    for record in records:
        print(record["文字列"]["value"] + ", " + record["数値"]["value"])

ポイントとしては、

アプリと対応するモデルを作成し、レコード操作する

存在しないフィールドは無視される

という所でしょうか。

エラーハンドリングはレコード取得と同様なので割愛・・・。

レコード更新

レコード更新も、モデルを使用する所は同様。

更新対象を取得して、値を変更して、更新処理を実行しています。

import pykintone
from pykintone import model

class Sample(model.kintoneModel):
    def __init__(self):
        super(Sample, self).__init__()
        self.文字列=""
        self.数値=0

account = pykintone.load("account.yml")
app = account.app()

# 更新するレコードを取得、更新処理実行
records = app.select("文字列=\"pykintoneから作成しました\"").models(Sample)
record = records[0]
record.文字列 = "pykintoneから更新しました"
app.update(record)

result = app.select("order by $id asc")
if result.ok:
    records = result.records
    for record in records:
        print(record["文字列"]["value"] + ", " + record["数値"]["value"])

ポイントとしては、

app.select().models(”対象アプリと対応するモデル”)でモデルに対して値を設定してくれる(配列で返却される)

という所でしょうか。

records[0]と無条件で先頭レコードに対して処理していますが、当然ながら存在チェック等、適宜追加が必要です。

こちらもエラーハンドリングはレコード取得と同様なので割愛・・・。

レコード削除

最後にレコード削除処理。

削除するレコードを取得して、取得したレコードのレコードIDを元に、対象レコードを削除しています。

import pykintone
from pykintone import model

class Sample(model.kintoneModel):
    def __init__(self):
        super(Sample, self).__init__()
        self.文字列=""
        self.数値=0

account = pykintone.load("account.yml")
app = account.app()

# 削除するレコードを取得
records = app.select("文字列=\"pykintoneから更新しました\"").models(Sample)
record = records[0]
app.delete(record.record_id)

こちらに関してはポイントは・・・もはや特に無いような。

強いて言えば、

レコードID(及びリビジョン)はモデルに定義していなくても、record_id、revisionとして使用可能

という所でしょうか。

こちらもエラーハンドリングはレコード取得と同様なので割愛・・・。

おわりに

ドキュメントに記載の無い部分は、GitHubのソースを追いつつ補完した形です。

何はともあれ有用なライブラリを作成していただいた作者様には感謝です!

Pythonカテゴリの最新記事