Turso LibSQL 文档速通

基础使用

参考 https://docs.turso.tech/quickstart#select-all-rows-from-table 快速入门文档

安装 turso cli

登录、注册 turso

创建一个数据库

展示数据库状态

进入数据库 shell

写 sql 创建 table、插入数据、查询数据 - 这部分后面用 drizzle 来完成

复制数据库到另一个区域 locations

使用比较简单，后续业务中连接数据库有 sdk 和 http 连接两种方案

获取 db 的 url

获取 jwt 的 token

安装 @libsql/client

基于 createClient 创建 client

client 执行 sql

基于 drizzle ORM

关联：

[[Drizzle ORM 文档速通]]

[[01 - 了解探索 sqlite 和 Cloudflare D1]]

[[node + sqlite]]

[[better-sqlite3]]

drizzle 和 sqlite 有一流的支持，连 AstroDB 都是基于 drizzle 封装的。

使用方式

安装 drizzle-orm 和 @libsql/client 依赖

安装 drizzle-kit 开发依赖，用来生成 sql、迁移 sql 开发间操作

drizzle-kit generate 生成

drizzle-kit migrate 迁移

drizzle-kit studio 页面查看

获取 db 的 uri 和 jwt token

创建 db/schema.ts 到处 table 定义

配置 drizzle.config.ts 设置 schema 位置、驱动、连接参数

使用 libsql 创建 client 实例，使用 drizzle 包装，用吧

修改了 schema 要 generate 生成 sql、通过 migrate 迁移数据库

使用 studio 的方式查看数据

看文档额外提到，可以用 sentry 来获取 sql 慢查询、sql 错误

基于 http 方式

libsql 远程协议

获取 db 的 url 和 token

基于 http 的 url 补齐 /v2/pipeline

准备 json 的 payload 参数，execute 和 close

使用 post 发送，查询结果

发送过程中提到了参数索引和参数命名

为什么要 close ？不 close 的话 10s 内根据 ctx 还能续上。

这种方式是基于 http 的，属于独有的连接方案，可以轻松在任何场合连接，有点意思。

关键词解释

sqlite 是 db 本身

turso 是整套方案的封装

docker 自托管

通过下面可以实现免鉴权方案拦截托管的 libsql-server，但是带 jwt 鉴权的还得再看看。

文档地址
https://github.com/tursodatabase/libsql/blob/main/docs/DOCKER.md

在 m1 芯片的苹果上使用这个

Copy
docker run --name some-sqld -p 8080:8080 -ti \
-e SQLD_NODE=primary \
--platform linux/amd64 \
ghcr.io/tursodatabase/libsql-server:latest

数据持久化

环境变量

sqld_node=primary/replica/standalone

数据卷 -v sqld-data:/var/lib/sqld

db 位置，本质还是 sqlite， SQLD_DB_PATH=iku.db

远程 jwt 授权 sqld_auth_jwt_key_file 传递一个 key.pem 私钥，

也可以使用 SQLD_AUTH_JWT_KEY 直接传递字符串

jwt 长什么样，希望后续可以通过 http 来连接和操作

Copy
{
"requests": [
{ "type": "execute", "stmt": { "sql": "SELECT * FROM users" } },
{ "type": "close" }
]
}

托管服务快速代码

Copy
# 展示 url
turso db show my-db --http-url

# token
turso db tokens create my-db

参考 https://www.json.cn/jwt/
https://jwt.io/

Copy
// header
{
"alg": "EdDSA",
"typ": "JWT"
}

// payload
{
"iat": 1726756735,
"id": "81220406-4854-4d4b-817e-61f4a092cdc4"
}