博客搭建教程(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 @uniqueURL 友好的标题(如 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 就能写入测试数据。

小结

这篇我们学了:

  1. 数据库是什么
  2. Prisma ORM 的作用
  3. 定义了 Post 数据模型
  4. 创建了数据库和种子数据

下一篇我们让这些数据显示在网页上。


💬 评论

加载中...