Turso

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

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

用法

您可以使用以下 Qwik 启动脚本轻松添加 Turso

npm run qwik add turso

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

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

  • src/lib/turso.ts

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

.env.local
PRIVATE_TURSO_DATABASE_URL=
PRIVATE_TURSO_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, "Go to the gym");
sqlite> insert into todo(id, task) values(2, "Buy groceries");

退出 shell .quit

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

PRIVATE_TURSO_DATABASE_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, "Go to the gym");
  insert into todo(id, task) values(2, "Buy groceries");

退出 shell .quit

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

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

turso db show <database-name> --url

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

并且,对于数据库身份验证令牌,运行该命令。

turso db tokens create <database-name>

复制生成的令牌并将其分配给 PRIVATE_TURSO_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 文档

贡献者

感谢所有帮助改进此文档的贡献者!

  • xinnks