🌤 prisma

# prisma 是数据库处理工具
npm install prisma  --save-dev

# @prisma/client 才是代码用的!
npm install @prisma/client
1
2
3
4
5

prisma generate 同步 Model 与 node_modules 中的代码模型

使用@prisma/client
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
1
2
tsconfig.json
{
  "compilerOptions": {
    "sourceMap": true,
    "outDir": "dist",
    "strict": true,
    "lib": ["esnext"],
    "esModuleInterop": true
  }
}
1
2
3
4
5
6
7
8
9

连接数据库

npx prisma init
1

prisma/schema.prisma

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}
1
2
3
4
5
6
7
8

.env

DATABASE_URL="mysql://root:sql123123@localhost:3306/prisma_demo?schema=public"
1

init

添加如下内容

model Post {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  title     String   @db.VarChar(255)
  content   String?
  published Boolean  @default(false)
  author    User     @relation(fields: [authorId], references: [id])
  authorId  Int
}

model Profile {
  id     Int     @id @default(autoincrement())
  bio    String?
  user   User    @relation(fields: [userId], references: [id])
  userId Int     @unique
}

model User {
  id      Int      @id @default(autoincrement())
  email   String   @unique
  name    String?
  posts   Post[]
  profile Profile?
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

添加 index.ts

import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

async function main() {
  // ... you will write your Prisma Client queries here

  //   await prisma.user.create({
  //     data: {
  //       name: "Alice",
  //       email: "alice@prisma.io",
  //       posts: {
  //         create: { title: "Hello World" },
  //       },
  //       profile: {
  //         create: { bio: "I like turtles" },
  //       },
  //     },
  //   });

  const allUsers = await prisma.user.findMany({
    include: {
      posts: true,
      profile: true,
    },
  });
  console.dir(allUsers, { depth: null });
}

main()
  .catch((e) => {
    throw e;
  })
  .finally(async () => {
    await prisma.$disconnect();
  });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

include 告诉 Prisma Client ,在 返回的 User 时,包含 posts 和 profile 关系。

最后

npx prisma migrate dev --name init
1

之后会自动处理数据库

Migrate

迁移工具

  1. 调整模型
  2. prisma migrate dev --name ???

introspection

数据库中的表 映射到 Prisma models

npx prisma db pull

工作流程:

  1. 读取 url 连接
  2. 读取数据库
  3. 生成 model