Turso

Turso 是基于 libSQL 的边缘数据库, 它是 SQLite 的开源开放贡献分支。

它使您能够将数据放置在全球35个位置附近,靠近您的用户。

使用方法

您可以通过使用以下 Qwik 起始脚本轻松添加 Turso:

npm run qwik add turso

此命令将添加使用 Turso 所需的依赖项。

它还会在您的项目文件夹中添加新文件:

  • src/lib/turso.ts

并添加或修改 .env.local 文件以包含以下内容

.env.local
PRIVATE_TURSO_DB_URL=
PRIVATE_TURSO_DB_AUTH_TOKEN=

使用文件数据库

对于本地开发和 CI 集成,使用本地数据库文件是理想的。

首先,通过运行 sqlite3 --version 检查您的机器上是否安装了 SQLite。 如果您得到的不是版本号(例如 0-14 20:58:05 554764a6e721fab307c63a4f98cd958c8428a5d9d8edfde951858d6fd02daapl), 请访问此链接以获取安装说明

然后,运行以下命令创建一个 SQLite 文件数据库。

sqlite3 foo.db

创建您的数据库模式。

sqlite> create table todo (id integer not null, task text, done int default 0);

向表中插入一些数据。

sqlite> insert into todo(id, task) values(1, "去健身房");
sqlite> insert into todo(id, task) values(2, "购买杂货");

退出 shell .quit

然后,在 .env.local 文件中将数据库文件路径分配给 PRIVATE_TURSO_DB_URL 环境变量。

PRIVATE_TURSO_DB_URL=file:foo.db

注意:使用文件数据库时不需要数据库令牌。

使用 Turso 数据库

当您想要将项目部署到生产环境时,您可以将 安装 Turso CLI 到您的机器上,并创建一个 Turso 数据库

使用 Turso CLI 的 db shell 命令向数据库发出查询。

turso db shell <database-name>

创建您的数据库模式。

  create table todo (id integer not null, task text, done int default 0);

向表中插入一些数据。

  insert into todo(id, task) values(1, "去健身房");
  insert into todo(id, task) values(2, "购买杂货");

退出 shell .quit

使用以下说明获取您的 Turso 数据库凭据, 并将其分配给部署环境中的环境变量。

从数据库 URL 开始,运行以下命令。

turso db show <database-name> --url

复制生成的 URL,并将其分配给 PRIVATE_TURSO_DB_URL 环境变量。

然后,对于数据库身份验证令牌,运行以下命令。

turso db tokens create <database-name>

复制生成的令牌,并将其分配给 PRIVATE_TURSO_DB_AUTH_TOKEN 环境变量。

如何在 Qwik 中使用 Turso

在您的路由中导入 tursoClient,并在 Qwik 的服务器端 API 中初始化一个数据库客户端实例, 这些 API 公开了 RequestEvent 对象,例如 routeLoader$()routeAction$()server$() 和端点处理程序, 例如 onGetonPostonRequest

import { tursoClient } from "~/utils/turso";
 
export const useRouteLoader = routeLoader$(
  async (requestEvent: RequestEventBase) => {
    const client = tursoClient(requestEvent);
 
    const items = await client.execute("select * from table");
 
    return {
      items: items.rows,
    };
  }
);

有关更多信息,请访问 Turso 文档

Contributors

Thanks to all the contributors who have helped make this documentation better!

  • xinnks