起步
几乎所有的应用都需要数据库。数据库可以让我们轻松高效地保存和读取数据。而想要与数据库打交道,则需要使用一种被称作 ORM(Object-Relational Mapping,对象关系映射)的框架,作为应用与数据库之间的桥梁。
在 Milkio 中,Drizzle 是首选的 ORM。它是唯一同时具有关系型查询 API 和类似 SQL 查询 API 的 ORM,在访问关系数据时为您提供两全其美的服务。
为什么需要使用 Drizzle?
数据库使用 SQL 作为语言,尽管单独使用它很简单,但是,当我们在代码中编写 SQL 时,就会为我们带来困扰。因为 SQL 是字符串,没有语法高亮、自动补全和错误提示,这让我们在编写过程中感到痛苦。同时,我们也很容易写出存在 SQL 注入漏洞 的代码。Drizzle 和其他 ORM 库都正在为我们解决这些问题,让我们和数据库打起交道来更加容易。
入门
在使用 Drizzle 之前,你需要先安装 Drizzle 及其所需的依赖,根据数据库不同,所需的依赖也不同。你可以阅读 Drizzle 文档 来了解如何使用你的数据库。下面,是关于使用 MySQL 和 PostgreSQL 的示例。请注意,如果你使用一些 serverless 提供商的数据库服务,即使这些数据库是兼容 MySQL 或 PostgreSQL 的,也请尽量阅读 Drizzle 的文档,这样你可以了解如何最佳地组合它们。
Milkio 和 Drizzle
你还需要安装 Milkio 与 Drizzle 结合所需的包,来简化你的 Drizzle 开发体验。
Drizzle 需要我们将所有的数据库表集合在一起。得益于 Milkio 的 生成阶段,我们可以在分开建立数据库表的同时,又不用手动编写一个文件将所有的数据库表结合在一起。
我们需要在 /milkio.toml
的 generate
配置中,在 significant
中添加下面的命令。这样在我们每次修改完文件后,Milkio 就会自动读取 /src/databases
目录,并且,将所有的 .ts
文件都在 /generated/database-schema.ts
中合并。
除此以外,我们还需要确保 database-schema.ts
始终存在。在你的 milkio.toml
末尾粘贴:
数据库配置
在 /.env
文件中,将数据库的连接信息填写在里面。如果你不知道这些信息该填写为什么,请询问你所使用的数据库提供商。
接下来,我们编写数据库的连接信息。我们在 /src/config
目录下,创建一个 drizzle.ts
文件。
在你的 /src/uses
目录中,创建一个 drizzle.ts
,并将下面的代码粘贴进去。下面的示例代码是 MySQL 的,你可能需要阅读 Drizzle Get Started,根据你实际所使用的数据库或者在使用的 serverless 提供商来修改下面的代码。总而言之,就是将 Drizzle 放到 Milkio 的 Use 里。
上面的示例是适用于 MySQL 的代码。如果你使用 PostgreSQL,可以使用下面的代码。
为什么 NoSQL 不是 Milkio 的首选?
MySQL、PostgreSQL 等关系型数据库最大的特点是拥有类型,就像我们使用 TypeScript 而不是 JavaScript 一样,类型可以帮助我们犯更少的错误,并且让其他代码阅读者更容易理解我们代码的意图。
使用关系型数据库最大的挑战在于编写 SQL 和通过 LEFT JOIN
的思考方式,去查询有关联关系的表中的数据。而 Drizzle 和其他 ORM 库,都是为了解决这些问题而诞生的,现在,这些已经不再是一个问题了。
此外,现在 Serverless 几乎都只提供关系型数据库,如 Vercel 的 Vercel Postgres、Cloudflare 的 D1、Tencent Cloud 的 TDSQL-C。
在尝试了 Drizzle 之后,你很可能会改变你对关系型数据库的看法。我们还专门编写了一个章节,来帮助零 SQL 基础的人来快速入门 Drizzle,稍后你可以阅读 用法 章节。