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

# ----------------------------------------------------------------------------------------------------------------
相关推荐
m0_591364736 分钟前
JavaScript中Object-hasOwn作为现代安全检测方案
jvm·数据库·python
m0_624578598 分钟前
html标签怎么避免标签嵌套错误_div不能放在p内原因【详解】
jvm·数据库·python
Highcharts.js28 分钟前
Highcharts 纯 JavaScript 图表库深度使用评测
开发语言·前端·javascript·功能测试·ecmascript·highcharts·技术评测
2301_7693406731 分钟前
怎样导出用于负载测试的样本数据_LIMIT限制数据量提取
jvm·数据库·python
瑶池酒剑仙32 分钟前
C++类和对象完全指南:从封装继承多态到内存布局的面向对象宝典(雨夜论道)
c语言·开发语言·c++·visual studio
三品吉他手会点灯40 分钟前
C语言学习笔记 - 27.C编程预备计算机专业知识 - 什么是字节
c语言·开发语言·笔记·学习
许彰午42 分钟前
政务远程帮办部署踩坑实录——从互联网到政务外网
开发语言·网络·政务
2401_850491651 小时前
c++如何通过文件映射mmap在多进程间实现高性能数据共享【进阶】
jvm·数据库·python
iuvtsrt1 小时前
PHP 中高效查找 CSV 行并获取前后指定偏移行的数据
jvm·数据库·python
m0_463672201 小时前
MySQL从库出现大量锁等待怎么办_分析从库执行计划与锁日志
jvm·数据库·python