Cloudflare Python SDK 4.1.0批量更新KV数据库报错求助
问题描述
尝试使用Cloudflare Python SDK批量更新KV数据库键值对时遇到错误,当前使用SDK版本为4.1.0,参考相关API文档编写的代码及运行错误如下:
代码示例
import os import json from cloudflare import Cloudflare # 读取JSON文件并转为字符串 with open('config.json', 'r', encoding='utf-8') as file: data = json.load(file) json_str = json.dumps(data, ensure_ascii=False) client = Cloudflare( api_email=os.environ.get("CLOUDFLARE_EMAIL"), api_key=os.environ.get("CLOUDFLARE_API_KEY"), ) response = client.kv.namespaces.keys.bulk_update( namespace_id=os.environ.get("KV_NAMESPACE_ID"), account_id=os.environ.get("CF_ACCOUNT_ID"), body=[{ "key" : "sb", "values": json_str }], ) print(response.successful_key_count)
运行报错信息
$python3 upload.py Traceback (most recent call last): File "/home/hall/sb-converter/upload.py", line 35, in <module> response = client.kv.namespaces.keys.bulk_update( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'KeysResource' object has no attribute 'bulk_update'
疑问
- 是否使用了错误的SDK版本?
- 该版本SDK中是否有其他更新键值对的方式?
- 如何修复该错误?
解决方案
SDK版本问题
Cloudflare Python SDK 4.1.0版本确实未封装bulk_update方法,该批量更新接口是在v4.12.0及之后的版本中才加入的,你当前使用的版本过旧,导致找不到对应方法。4.1.0版本的替代更新方式
在4.1.0版本中,只能通过单个键值更新接口client.kv.namespaces.keys.put循环处理每个键值对,示例代码如下:
# 待更新的键值对列表 key_value_list = [ {"key": "sb", "value": json_str} ] for pair in key_value_list: res = client.kv.namespaces.keys.put( namespace_id=os.environ.get("KV_NAMESPACE_ID"), account_id=os.environ.get("CF_ACCOUNT_ID"), key=pair["key"], body=pair["value"] ) print(f"键 {pair['key']} 更新状态: {res}")
- 错误修复方案
有两种可行方案:
- 方案一:升级SDK到新版本
执行以下命令升级至最新版本:
pip install --upgrade cloudflare
升级后,需修正原代码中的参数错误(将values改为value),正确的批量更新代码:
response = client.kv.namespaces.keys.bulk_update( namespace_id=os.environ.get("KV_NAMESPACE_ID"), account_id=os.environ.get("CF_ACCOUNT_ID"), body=[{ "key": "sb", "value": json_str # 此处应为value而非values }], ) print(response.successful_key_count)
- 方案二:保留旧版本,使用单键循环更新
采用上述put方法循环处理每个键值对,虽然效率不及批量更新,但能完全兼容4.1.0版本。
内容的提问来源于stack exchange,提问作者neo742
相关产品推荐
相关产品推荐

