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

# ----------------------------------------------------------------------------------------------------------------
相关推荐
weilaieqi16 分钟前
行业前列!CASAMANIA HORM富森美高端意式沙发标杆
开发语言
小二·30 分钟前
WebGPU 浏览器端跑大模型:让AI在网页里跑起来(WebLLM/Transformers.js实战)
开发语言·javascript·人工智能
小猴子爱上树35 分钟前
Temu批量视频翻译Python实现方案
开发语言·python·音视频
IDIOSF1 小时前
R语言 下载安装教程(附安装包)R语言4.5安装步骤(保姆级)
开发语言·其他·r语言
乱七八糟的屋子1 小时前
LibYAML超全教程-C语言YAML解析与生成
c语言·开发语言·配置文件·yaml解析·libyaml·开源库实战
X1A0RAN1 小时前
Python 并发请求性能优化实战
python·性能优化·并发编程
陈同学xxx1 小时前
Hermes Agent 接入飞书,在手机上随时聊天
linux·python·飞书
paopaokaka_luck1 小时前
基于Springboot3+Vue3的宠物殡葬管理系统(webSocket实时通讯、接入腾讯地图、支付宝沙盒支付、Echarts图形化分析)
java·开发语言·网络·后端
卷无止境1 小时前
Python 中基于 Qt 的 GUI 库授权方式全解析
后端·python
逝水无殇1 小时前
HTML 元素详解
开发语言·前端·html