导入
使用 Deno 连接 Postgres
学习在应用程序中何时使用SQL。
SQL数据库和NoSQL数据库各有优缺点。选择其中一种取决于多种因素,这仍然是一个主观决策,因为理论上两者都能完成相同的工作。

SQL数据库的优缺点
| 优点 | 缺点 |
|---|---|
| 数据完整性语义:通过实现ACID特性,SQL数据库中的数据具有高度可靠性。 | 数据模型僵化:这是SQL数据库最明显的缺点之一。固定的数据库结构(模式)在模型频繁更新时可能带来问题。 |
| SQL查询:由于SQL查询语言成熟且维护良好,因此非常灵活且优化程度高。SQL查询通常易于编写和维护。 | 水平扩展能力有限:许多SQL数据库不支持简单的水平扩展。根据应用规模和使用情况,这可能会成为问题,但可以通过其他方式解决。 |
| 数据优化:得益于SQL数据库的成熟与简洁,其内存占用较低,从而具备出色的性能。 |
使用场景
SQL数据库的一个常见应用场景是用户管理,因为这类数据库结构严谨,能确保数据的高可用性。数据模型的稳定性通常不是问题,因为用户模型往往变化不大。
当然,我们也可以使用NoSQL数据库来处理此类场景。最终选择哪种数据库,取决于我们认为哪种更适合项目需求。
数据库模式
我们有一个简单的模式,仅包含ID、名字和姓氏三个字段。
要创建数据库,可以使用以下SQL语句:
1CREATE TABLE Users(id SERIAL PRIMARY KEY, firstname varchar(255), lastname varchar(255));
接下来,我们可以添加一些数据:
1INSERT INTO users (firstname, lastname) values ('欧比旺', '克诺比');
数据库模式如下所示:
...
数据库模式
添加依赖项
要在Deno中使用PostgreSQL,我们需要引入另一个依赖项——PostgreSQL Deno驱动程序。虽然有多种驱动可选,但本课程将使用来自denodrivers的版本。
添加依赖项非常简单。假设我们有一个server.ts文件,只需在文件中加入以下导入语句:
1import { Client } from "https://deno.land/x/postgres/mod.ts";
这里我们导入了Client对象,可用于建立PostgreSQL连接。
建立连接
添加导入语句后,我们可以在server.ts文件中建立数据库连接,代码如下:
1const client = new Client({ 2 applicationName: "<APP_NAME>", 3 connection: { 4 attempts: 3, 5 }, 6 database: "<DATABASE>", 7 hostname: "<HOSTNAME>", 8 user: "<USER>", 9 password: "<PASSWORD>", 10 port: "<PORT>", 11 tls: { 12 enforce: false, 13 }, 14});
现在,将占位符替换为实际数据,并使用以下命令运行应用程序:
1deno run --allow-net server.ts
执行查询
现在我们已经创建了客户端,可以建立连接并执行查询。具体步骤如下:
- 连接到数据库。
- 执行查询并将结果输出到控制台。
- 关闭数据库连接。
可以使用以下代码实现:
1// 连接数据库 2await client.connect(); 3 4// 执行查询并打印结果 5const result = await client.queryArray("select id, firstname, lastname from users;"); 6console.log(result.rows); 7 8// 关闭数据库连接 9await client.end();
下面是一个示例,展示了如何成功连接数据库、执行查询并关闭连接。
No configuration found for ID: ff0797f21f8ac8c4881195225010e289dbb929d485b90b838055708adac1f867
说明
- 第4至10行:我们使用PostgreSQL默认数据库连接到本地PostgreSQL实例。
- 第13行:我们创建了
Users表。 - 第16行:我们通过SQL语句插入了一些数据。
- 第19至20行:我们查询
Users表中的所有数据,并将其显示在控制台中。