跳至主要内容

如何在 Deno 中使用 Planetscale

Planetscale 是一个与 MySQL 兼容的无服务器数据库,它专为开发人员工作流程而设计,开发人员可以在命令行中创建、分支和部署数据库。

在此处查看源代码。

我们将使用 Planetscale 无服务器驱动程序 @planetscale/database 来与 Deno 协同工作。首先,我们要创建 main.ts 并从该包中导入 connect 方法

import { connect } from "npm:@planetscale/database@^1.4";

配置我们的连接

连接需要三个凭据:主机、用户名和密码。这些是特定于数据库的,因此我们首先需要在 Planetscale 中创建一个数据库。您可以按照初始说明此处进行操作。不用担心添加模式 - 我们可以通过@planetscale/database来完成。

创建完数据库后,前往概述,点击“连接”,选择“使用@planetscale/database连接”以获取主机和用户名。然后点击“密码”以创建数据库的新密码。获得所有三个凭据后,您可以直接将它们插入,或者更好地将它们存储为环境变量。

export HOST=<host>
export USERNAME=<username>
export PASSWORD=<password>

然后使用Deno.env调用它们。

const config = {
host: Deno.env.get("HOST"),
username: Deno.env.get("USERNAME"),
password: Deno.env.get("PASSWORD"),
};

const conn = connect(config);

如果您在仪表盘中设置了环境变量,这在 Deno Deploy 上也能正常工作。使用以下命令运行:

deno run --allow-net --allow-env main.ts

现在,conn对象是与我们的 Planetscale 数据库的开放连接。

创建和填充我们的数据库表

现在您已运行连接,您可以使用conn.execute()和 SQL 命令来创建表并插入初始数据。

await conn.execute(
"CREATE TABLE dinosaurs (id int NOT NULL AUTO_INCREMENT PRIMARY KEY, name varchar(255) NOT NULL, description varchar(255) NOT NULL);",
);
await conn.execute(
"INSERT INTO `dinosaurs` (id, name, description) VALUES (1, 'Aardonyx', 'An early stage in the evolution of sauropods.'), (2, 'Abelisaurus', 'Abels lizard has been reconstructed from a single skull.'), (3, 'Deno', 'The fastest dinosaur that ever lived.')",
);

查询 Planetscale

我们也可以使用相同的conn.execute()来编写我们的查询。让我们获取所有恐龙的列表。

const results = await conn.execute("SELECT * FROM `dinosaurs`");
console.log(results.rows);

结果

[
{
id: 1,
name: "Aardonyx",
description: "An early stage in the evolution of sauropods.",
},
{
id: 2,
name: "Abelisaurus",
description: "Abels lizard has been reconstructed from a single skull.",
},
{ id: 3, name: "Deno", description: "The fastest dinosaur that ever lived." },
];

我们还可以通过指定恐龙名称来从数据库中获取单个行。

const result = await conn.execute(
"SELECT * FROM `dinosaurs` WHERE `name` = 'Deno'",
);
console.log(result.rows);

这将给我们一个单行结果。

[{ id: 3, name: "Deno", description: "The fastest dinosaur that ever lived." }];

您可以在他们的文档中找到有关使用 Planetscale 的更多信息。