博客搭建教程(2):数据库入门
数据库就是存数据的地方。比如你的博客有 100 篇文章,这 100 篇文章存在数据库里。 数据库有很多种。我们用的是 SQLite——它不需要安装任何软件,整个数据库就是一个文件(dev.db),非常适合个人博客。 直接操作数据库需要写 SQL 语句(SELECT FROM posts WHERE ...),比较繁琐。 Prisma 是一个 ORM(Object-Relational Mappi...
博客搭建教程(2):数据库入门 — Prisma 与 SQLite
什么是数据库?
数据库就是存数据的地方。比如你的博客有 100 篇文章,这 100 篇文章存在数据库里。
数据库有很多种。我们用的是 SQLite——它不需要安装任何软件,整个数据库就是一个文件(dev.db),非常适合个人博客。
什么是 Prisma?
直接操作数据库需要写 SQL 语句(SELECT * FROM posts WHERE ...),比较繁琐。
Prisma 是一个 ORM(Object-Relational Mapping),它让你用 JavaScript 代码操作数据库,不用写 SQL:
// 不用写 SQL,而是这样:
const posts = await prisma.post.findMany({ where: { published: true } });
Prisma 会自动把这段代码翻译成 SQL 去执行,把结果返回给你。
第一步:安装 Prisma
在项目目录下运行:
npm install prisma @prisma/client
npx prisma init --datasource-provider sqlite
这会在项目根目录创建 prisma/schema.prisma 文件。
第二步:设计数据模型
打开 prisma/schema.prisma,我们来定义"文章"的数据结构:
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
model Post {
id String @id @default(cuid())
slug String @unique
title String
content String
published Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
逐行解释:
| 代码 | 含义 |
|---|---|
model Post | 定义一个叫 Post 的模型(对应数据库的 posts 表) |
id String @id @default(cuid()) | 主键,唯一ID,自动生成(cuid = 随机字符串) |
slug String @unique | URL 友好的标题(如 hello-world),不能重复 |
content String | 文章正文 |
published Boolean @default(false) | 是否发布,默认草稿 |
@default(now()) | 自动填当前时间 |
@updatedAt | 更新时自动刷新时间 |
第三步:创建 Prisma 客户端
新建 src/lib/prisma.ts:
import { PrismaClient } from "@prisma/client";
const globalForPrisma = globalThis as unknown as {
prisma: PrismaClient | undefined;
};
export const prisma = globalForPrisma.prisma ?? new PrismaClient();
if (process.env.NODE_ENV !== "production") {
globalForPrisma.prisma = prisma;
}
这个文件的作用是创建一个全局的 Prisma 实例。globalThis 那几行的意思是:开发模式下把实例缓存起来,热重载(保存文件自动刷新)时不会重复创建。
第四步:创建数据库
npx prisma db push
这个命令会根据 schema.prisma 的定义,自动在数据库里创建对应的表。
第五步:写种子数据
新建 prisma/seed.ts,写入一些示例文章:
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
async function main() {
await prisma.post.create({
data: {
slug: "hello-world",
title: "你好世界",
content: "这是我的第一篇博客文章!",
published: true,
},
});
console.log("种子数据创建完成");
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect());
然后在 package.json 里加上 seed 配置:
"prisma": {
"seed": "tsx prisma/seed.ts"
}
运行 npx prisma db seed 就能写入测试数据。
小结
这篇我们学了:
- 数据库是什么
- Prisma ORM 的作用
- 定义了 Post 数据模型
- 创建了数据库和种子数据
下一篇我们让这些数据显示在网页上。