lancedb 表名 编解码 与 转译 python

在本地储存 lancedb 数据库,表名需要处理。

如果是有效表名,则直接使用,否则编码为base64字符串 (特化的base64字符串),特化的字符串以 b64u8 开头。

python 复制代码
from lancedb.util import validate_table_name

# ----------------------------------------------------------------------------------------------------------------

_enc_prefix = '_b64u8_'
_encode_translation = bytes.maketrans(b'+/=', b'-_.')
_decode_translation = bytes.maketrans(b'-_.', b'+/=')


# 转译 原始字符串 到 编码后字符串。如果 validate_table_name 失败则转译
def _encode_name(name: str):
    try:
        validate_table_name(name)
        return name
    except ValueError:
        pass
    name = _enc_prefix + base64.b64encode(name.encode('u8')).translate(_encode_translation).decode('u8')
    validate_table_name(name)
    return name

# 转译 编码后字符串 到 原始字符串。根据前缀,决定是否转译
def _decode_name(name: str):
    if name.startswith(_enc_prefix):
        name = name.removeprefix(_enc_prefix)
        name = base64.b64decode(name.encode('u8').translate(_decode_translation)).decode('u8')
    return name


def encode_names(names: str|list[str]):
    if isinstance(names, str):
        return _encode_name(names)
    else:
        assert isinstance(names, (tuple, list))
        return [_encode_name(n) for n in names]

def decode_names(names: str|list[str]):
    if isinstance(names, str):
        return _decode_name(names)
    else:
        assert isinstance(names, (tuple, list))
        return [_decode_name(n) for n in names]


def dt_to_lance_ts_str(t: dt.datetime):
    # 转换为lancedb可用的时间字符串
    t_str = t.strftime("%Y-%m-%d %H:%M:%S.%f")
    t_str2 = f"to_timestamp('{t_str}')"
    return t_str2

# ----------------------------------------------------------------------------------------------------------------
相关推荐
Csvn1 天前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户556918817531 天前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
兵慌码乱2 天前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
luckdewei2 天前
FastAPI 资产管理系统实战:复杂 ORM 关联、Alembic 迁移与 N+1 查询优化
python
aqi002 天前
15天学会AI应用开发(八)使用向量数据库实现RAG功能
人工智能·python·大模型·ai编程·ai应用
Csvn2 天前
`functools.lru_cache` —— 一行代码搞定缓存加速
后端·python
金銀銅鐵3 天前
[Python] 从《千字文》中随机挑选汉字
后端·python
cup113 天前
[技术复盘] Windows Python 打包实战:Nuitka 环境踩坑总结与 CI 自动化构建全指南
python·ai·环境变量·ci·nuitka·skill