唯杰地图 logo唯杰地图
VJMAP
EN

05_data_storage_kv.py

vjmap-service/examples/python/05_data_storage_kv.py 1.6 KB50 行
原文
"""示例 5:KV 数据存储全流程(单值 / 批量 / 前缀)。

用法:
    python 05_data_storage_kv.py

注意:
- key 不能含 "/"(路由 data/{key} 单段匹配,会 404);前缀分隔用 ":",
  不要用 "_"/"%"(前缀匹配是 SQL LIKE 通配符)。本示例统一用 "demo:nb:..." 作为 key。
"""
from __future__ import annotations

import json

from _common import make_client


def main() -> None:
    svc = make_client()

    prefix = "demo:nb:"  # ':' 作分隔:前缀查询/删除是 SQL LIKE,'_' 会被当通配符
    print(f"[1/6] 单键写入 {prefix}user1")
    svc.save_custom_data(f"{prefix}user1", value=json.dumps({"name": "alice", "age": 20}))

    print(f"[2/6] 单键读取")
    user1 = svc.get_custom_data(f"{prefix}user1")
    print("  ->", user1.get("data"))

    print(f"[3/6] 批量写入(user2 / user3)")
    svc.save_multiple_custom_data([
        {"key": f"{prefix}user2", "value": json.dumps({"name": "bob", "age": 30})},
        {"key": f"{prefix}user3", "value": json.dumps({"name": "carol", "age": 25})},
    ])

    print(f"[4/6] 列出 prefix 下所有 key")
    keys = svc.get_custom_data_keys(prefix=prefix)
    print("  ->", keys.get("keys"))  # 响应字段是 keys(不是 data)

    print(f"[5/6] 删除单个 {prefix}user2")
    svc.delete_custom_data(f"{prefix}user2")

    print(f"[6/6] 按前缀批量删除")
    svc.delete_custom_data(prefix, is_prefix=True)

    final_keys = svc.get_custom_data_keys(prefix=prefix).get("keys") or []
    print("  清理后剩余 keys:", final_keys)


if __name__ == "__main__":
    main()