Cloudflare D1とKVをPythonから操作する②

Cloudflare
スポンサーリンク

最初に

この記事は「Cloudflare D1とKVをPythonから操作する①」からの続きです

必要なシークレットキーの設定などを行っている前提なので、実行中にシークレットキーが無いなどあれば前の記事を読んで設定してください

また、実装しているコードは下記に置いています

Google Colab

KV(Key-Valueストア)とは

前回の記事ではD1のデータベースの使い方について書きました

KVは必要なのと思われるかもしれませんが、これがあるから自分はCloudflareの有料プランを契約しました

自分が作っているwebサイトでは配信者の動画をまとめて表示するようなサイトを作っています

そのなかのページに今日の人気の動画の一覧ページがあるのですが、このページはリアルタイム更新ではなく1時間ごとに更新しています

なので、人気の動画の一覧は、

①DBから人気の動画を取得

②KVに一時保存を繰り返してwebサイトに反映

を繰り返しています

これによって、webサイトの訪問者ごとにDBがクエリで直接叩かれることを防ぐ+KVで低遅延で配信することを実現しています

Cloudflare KVをPythonで操作

Cloudflare KVの名前空間の作成

左のサイドバーから「KV」→「名前空間を作成する」をクリック

好きな名前を入れて「追加」を押します

追加すると画面の下でIDが分かります

「CLOUDFLARE_KV_NAMESPACE_ID」という名前でGoogle Colabのシークレットに登録します

Cloudflare KVにデータの登録

KVにデータを入れます

metadataとvalueを入れる必要があるのですが、valueはキーとバリューの値を入れます

metadataは空で入れています、metadataは何を入れたらいいかはわかっていません

import json

metadata = {
}

values = {
    "name": "apple",
    "price": "200"
}

client.kv.namespaces.values.update(key_name="fruit_list", account_id=userdata.get("CLOUDFLARE_ACCOUNT_ID"),
                                   namespace_id=userdata.get("CLOUDFLARE_KV_NAMESPACE_ID"), metadata=json.dumps(metadata), value=json.dumps(values))

※jsonに変換して値を入れていますが、誤ってdict型にしていると下記のようなエラーが出ていました
エラー内容から型が誤っているとはわからず試行錯誤して、引数がstrってことが分かってdictからjsonに変換しないといけないのではと思って実行したら行けました

multipart put request does not contain required form field .....

成功するとClouflareのページを見ると下記のようにデータがKVに登録されていることが分かります

また、このfruit_listキーで登録されたデータは再度値を変更して登録すると上書き出来ます

ここら辺がDBとかと少し違いますね、簡単に変更ができます

Cloudflare KVからデータの読み出し

先ほど保存したデータを下記の関数で取得します

res = client.kv.namespaces.values.get(key_name="fruit_list", account_id=userdata.get("CLOUDFLARE_ACCOUNT_ID"),namespace_id=userdata.get("CLOUDFLARE_KV_NAMESPACE_ID"))
print(res.json())
{'name': 'apple', 'price': '200'}

※resの型定義が「BinaryAPIResponse」でなんだこれと思っていたのですが、
「BinaryAPIResponse」→「APIResponse」
とクラスの継承が行われていて、「APIResponse」の中に「json」関数があってこれで出力できるのでは?って試すとできました

cloudflare-python/src/cloudflare/_response.py at cce7ce82e064a8e911ad052234dfde30355218c3 · cloudflare/cloudflare-python
The official Python library for the Cloudflare API - cloudflare/cloudflare-python

こういう構造めっちゃ綺麗ですよね

どうやったらここまで構造化された仕様を作れるんだろうか?

まとめ

Cloudflare D1とKVをPythonでデータを読み書きする方法を説明しました

この記事を書いた理由は、PythonでWorkerを動かせる記事はあったのですが、cloudflare-pythonを使った記事がほぼなかったので書きました

あと、自分がHonoに挑戦するのでPythonからTypescriptへ移行するので忘れないうちに備忘録として書こうと思って書きました

自分はこれ以上深い使い方はしないのでこれ以上の記事を書くことはないですが、誰かの役に立てば幸いです

コメント

タイトルとURLをコピーしました