跳至主要內容

如何將 Planetscale 與 Deno 搭配使用

Planetscale 是一個相容於 MySQL 的無伺服器資料庫,其設計採用開發人員工作流程,讓開發人員能夠從命令列建立、分歧和部署資料庫。

在此查看原始碼。

我們將使用 Planetscale 無伺服器驅動程式 @planetscale/database,以使用 Deno。首先,我們想要建立 main.ts 並從此套件匯入連線方法

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 資料庫的開放連線。

建立並填充我們的資料庫表格

現在您已執行連線,您可以使用 SQL 指令來 conn.execute() 建立表格並插入初始資料

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 的資訊。