SQLite扩展插件终极集合

作为一个嵌入式数据库引擎,SQLite 与其他数据库管理系统相比,缺少了一些功能。不过 SQLite 提供了一个扩展机制,因此我们可以在网络上找到大量的 SQLite 插件。

今天我们介绍的这个插件叫做 sqlean,它打包了许多流行的 SQLite 扩展,提供了清晰的 API,并且进行了测试和文档工作,我们可以将它作为一个 SQLite 扩展的标准库。

包含插件

具体来说,sqlean 打包了以下常用的扩展功能:

  • crypto:哈希函数,编码、解码函数。
  • define:SQL 自定义函数以及动态 SQL。
  • fileio:读写操作系统文件。
  • fuzzy:字符串模糊匹配和语音学搜索。
  • ipaddr:IP 地址操作(不支持 Windows 平台)。
  • math:数学运算函数(SQLite 3.35 开始支持内置这些函数)。
  • regexp:正则表达式搜索和替换。
  • stats:统计函数。
  • text:字符串函数。
  • unicode:Unicode 支持。
  • uuid:UUID 函数。
  • vsv:CSV 文件虚拟表功能。

除了以上扩展之外,我们还可以通过 https://sqlpkg.org/ 搜索和下载大量其他的扩展插件。

下载安装

sqlean 的源代码托管在 GitHub,我们可以选择下载预编译的二进制文件。以 Windows 平台为例,预编译文件包含以下 DLL:

在这里插入图片描述
其中,sqlean.dll 文件包含了其他文件中的内容。我们可以在 SQLite 中加载这些扩展,例如:

sqlite> .load ./sqlean

sqlite> select median(value) from generate_series(1, 99);
50.0

另外一种使用方法就是下载打包的 sqlean 命令行工具,它是一个包含了以上扩展的 SQLite 命令行工具。

在这里插入图片描述
对于图形开发工具,可以使用 load_extension 函数加载插件。例如:

select load_extension('C:\file_path\sqlean');

Python、JavaScript、Node.js、Go 等编程语言中的安装方法可以参考说明文档。

如果选择使用源码编译,可以下载源文件和依赖文件:

make prepare-dist
make download-sqlite
make download-external

然后基于不同平台执行以下编译命令:

make compile-linux
make compile-windows
make compile-macos

编译之后的扩展库位于 dist 目录。

使用示例

crypto 扩展提供了哈希函数和编码解码函数,例如:

sqlean> select hex(md5('SQLite'));
497757A9C5B2EC17DED656170B51C788

sqlean> select encode('SQLite', 'base64');
U1FMaXRl

sqlean> select decode('U1FMaXRl', 'base64');
SQLite

define 扩展支持自定义的 SQL 函数以及动态 SQL 语句,例如:

sqlean> select define('sumn', ':n * (:n + 1) / 2');

sqlean> select sumn(5);
15

sqlean> select undefine('sumn');

sqlean> select eval('select ''SQLite''');
SQLite

fileio 扩展提供了读写文件的功能,例如:

sqlean> select fileio_write('hello.txt', 'hello world');
11

sqlean> select fileio_read('hello.txt');
hello world

sqlean> select fileio_read('hello.txt', 6);
world

regexp 扩展支持正则表达式搜索和替换,例如:

sqlean> select regexp_like('the year is 2024', '[0-9]+');
1

sqlean> select regexp_replace('the year is 2021', '[0-9]+', '2024');
the year is 2024

stats 扩展提供了一些统计函数,例如:

sqlean> select * from generate_series(5, 20, 5);
5
10
15
20

sqlean> select percentile(value, 25) from generate_series(0, 9);
2.25

uuid 扩展提供了最新版本的 UUID 实现,例如:

sqlean> select uuid4();
0e4f4203-0221-4623-8890-d962ad84641d

sqlean> select uuid7();
01903895-4266-73b1-a5bf-9081a6b45d96

详细的扩展说明可以参考说明文档。

相关项目

  • sqlpkg.org:搜索和下载 SQLite 扩展插件。
  • sqlime.org:一个在线 SQLite 运行环境。
  • sqlpkg:SQLite 扩展包管理器。
  • sqlean.py:Python sqlite3 替代模块,包含了 sqlean 扩展插件。
  • sqlean.js:JavaSricpt sqlite3 替代包,包含了 sqlean 扩展插件。
  • shell:SQLite 命令行工具,包含了 sqlean 扩展插件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/730341.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【windows】字体安装手册

windows字体安装手册 1 下载字体文件 百度搜索XXX字体ttf文件进行下载 附:宋体gb2312下载地址: https://www.downza.cn/soft/7780.html 2 字体安装 1.搜索字体 2.将下载的ttf文件拖拽添加 3.关闭办公软件重新打开后,outlook、word、…

装备制造业CRM解决方案

01、数字化转型驱动企业,向“以客户需求驱动创新生产”的智能制造业转变 我国装备制造业经过多年的发展,取得了令人瞩目的成就,形成了门类齐全、具有相当规模和一定水平的产业体系;主要包含通用设备、专用设备、电气机械、交通运…

GPT 模型简史:从 GPT-1 到 GPT-4

文章目录 GPT-1GPT-2GPT-3从 GPT-3 到 InstructGPTGPT-3.5、Codex 和 ChatGPTGPT-4 GPT-1 2018 年年中,就在 Transformer 架构诞生⼀年后,OpenAI 发表了⼀篇题 为“Improving Language Understanding by Generative Pre-Training”的论文,作者…

DS知识点总结--线性表定义及顺序表示

数据结构知识点汇总(考研C版) 文章目录 数据结构知识点汇总(考研C版)二、线性表2.1 线性表的定义和操作2.1.1 线性表的定义2.1.2 线性表的基本操作 2.2 线性表的顺序表示2.2.1 顺序表的定义2.2.2 顺序表上的基本操作的实现 二、线性表 2.1 线性表的定义和操作 2.1.1 线性表的…

阿里云如何实现express的自动化部署(保姆级教程)

本篇文章将详细介绍一下阿里云如何实现express的自动化部署,作者本人总结的保姆级教程!!! 首先去阿里云官网 (阿里云-计算,为了无法计算的价值) 搜索函数计算fc 如果没有开通过选择免费开通,…

RockChip Android12 Settings一级菜单

一:概述 在之前的文章中对Android8.1 Settings的流程进行了说明,本章将针对Android12 Settings一级菜单的加载逻辑进行详细说明,Settings版本之间的差异不是很大,有兴趣的同学可自行学习,本文不在做赘述。 Android8.1 Settings说明:RockChip Android8.1 Settings-CSDN博…

在win10 上使用ssh连接到树莓派上

在win10 上使用ssh连接到树莓派上 树莓派上的设置 启用ssh 启用VCN和SSH,这样可以使用VNC和SSH远程。 win10 上的设置 安装ssh客户端 按下win键输入"应用和功能" 如果没有安装就搜索:OpenSSH客户端,安装。 连接到树莓派…

STM32---SPI通信协议(小白入、含源码)

写在前面:在单片机的学习过程中,各种通信协议的学习是必不可少的,在前面我们学习了串口通信、IIC通信,本节我们来认识一下SPI通信协议。包括其SPI基本概念、NORFLASH芯片的介绍以及相关的例程实验。 目录 一、SPI介绍 1.1什么是…

socket--IP端口爆破域名解析

免责声明:本文仅做技术交流与学习... 目录 IP端口爆破 域名解析爆破 IP端口爆破 #端口扫描: #获取扫描的 IP和端口 #连接 IP和端口(socket) #判断连接状态-开放和关闭# import socket # # 加入参数模式 # import os # ssocket.socket() # s.connect((…

3.1、前端异步编程(超详细手写实现Promise;实现all、race、allSettled、any;async/await的使用)

前端异步编程规范 Promise介绍手写Promise(resolve,reject)手写Promise(then)Promise相关 API实现allraceallSettledany async/await和Promise的关系async/await的使用 Promise介绍 Promise是一个类,可以翻…

图像分割(三)-RGB转HSV后图像分割方法

常用彩色模型有RGB和HSV模型,有时候在RGB颜色空间进行背景分割比较困难的问题,转换为HSV模型然后对色调和饱和度图像进行处理会得到比较理想的处理结果,下面通过一个实例讲解该方法的MATLAB实现,该方法对其他图像检测也具有一定的参考价值。 …

python19 异常处理

python19 异常处理 代码 异常处理 result 0; try:num1 int(input(请输入一个整数:))num2 int(input(请输入一个整数:))result num1 / num2 except ZeroDivisionError:print(除数不能为0) except ValueError:print(不能将字符串转成整数) except BaseException:print(未知异…

【EndNote】EndNote进行文献管理可能遇到的问题和解决方案

一、安装GB/T7714-2015(numberic)文献style windows:https://blog.csdn.net/qq_36235935/article/details/115629694 mac os:Mac版Endnote 20导入中文参考格式Chinese Std GBT7714 (numeric)-CSDN博客 安装完之后需要调整Author Name格式:…

【ARMv8/ARMv9 硬件加速系列 3.3 -- SVE LD2D 和 ST2D 使用介绍】

文章目录 SVE 多向量操作LD2D(加载)LD2D 操作说明LD2D 使用举例ST2D(存储)ST2D 使用举例ST2D 存储示例代码ld2d 和 st2d 小结SVE 多向量操作 在ARMv8/9的SVE (Scalable Vector Extension) 指令集中,st2d和ld2d指令用于向量化的存储和加载操作,具体地,它们允许同时对两个…

【STM32入门学习】定时器与PWM的LED控制

目录 一、定时器与PWM介绍 1.1定时器 1.1.1定时器分类简介 1.1.2STM32定时器分类比较表 1.1.3定时器启动操作: 1.2 PWM 1.2.1 简介: 1.2.2PWM工作原理 1.2.3使用步骤: 二、定时器计数控制LED灯亮灭 2.1HAL库 2.1.1使用HAL库创建…

【背包题解】DP代表了走到阶段i 的所有路线的最优解

目录 1889:【提高】多重背包(2) 二维费用背包 2075 - 最大卡路里 1928 - 采购礼品 背包容量:(c) 6 重量 weight 2 2 4 6 2 1 2 3 4 5 价值 value 3 6 5 5 8 1 2 3 4 5 wvdp数组:记录有i件…

作业管理系统

摘 要 随着网络的发展,信息化时代的到来,在教学工作的过程中作用越来越明显,作业的及时发布,学生的及时提交,以及通过网上的批改和评分,都大大促进教学质量的发展,充分的利用网络来加强管理&am…

vue2动态横条图(横条图样式定时切换)

每次切换成新图后会清除定时器和图(重新加载,否则要么会重复加载定时器。清除定时器之后要先调用一次index为0的数据) 数据样例 acrossBarDatas:{data: ["80", "80"],sunffix: [单位, "单位"],title: "标…

可信启动Trusted Board Boot

TBB Trusted Board Boot(TBB)对所有固件镜像(包括普通世界的bootloader)进行身份验证,以防止恶意固件在平台上运行。TBB使用公钥加密标准 (PKCS)来建立信任链(Chain of Trust&#…

Log4j2异步打印可变对象的问题

现象 应用代码如下: Test test new Test();test.setA(1);test.setB("1");log.info("before modification: {} \t ",test);test.setA(2);test.setB("2");log.info("after modification: {} \t ",test);问题应用的日志控制…