What is Prisma? [Prisma]

SnowCat·2023년 5월 4일
0

Prisma

목록 보기
1/10
post-thumbnail

Prisma란?

  • Prisma는 오픈소스 ORM 프로젝트로 아래와 같은 하위 항목들로 구성됨

    • Prisma Client: node.js용 쿼리 빌더
    • Prisma Migrate: 마이그레이션 시스템
    • Prisma Studio: Primsa로 작성된 DB를 편집하는 GUI (오픈소스 아님)
  • Prisma는 지원하는 모든 노드, 타입스크립트 애플리케이션에서 사용 가능

Prisma의 작동 방식

Prisma Schema

  • Prisma에서 데이터 형식을 정의하기 위해 별도의 스키마 파일 사용
  • 정의된 데이터 형식을 통해 직관적인 데이터 접근이 가능해짐
  • 데이터베이스 연결을 정의하는 datasource, client를 생성하는 generator, 데이터 모델을 정의하는 model의 세부분으로 구성됨
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

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

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false)
  author    User?   @relation(fields: [authorId], references: [id])
  authorId  Int?
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  posts Post[]
}

Prisma data model

  • 데이터 모델은 model의 집합을 의미함
  • 각각의 모델은 RDB의 테이블 또는 몽고DB의 컬렉션을 의미하며, Prisma 클라이언트 API에서 쿼리의 대상이 됨
  • 데이터 모델은 Prisma에서 스키마를 작성해 DB에 푸시할수도 있고, 반대로 DB에 이미 있는 테이블을 조회해 prisma에 가져올수도 있음

Install

  • 다음의 커맨드 입력
npm install @prisma/client 
  • 설치이후 해당 폴더에서 prisma generate 실행
  • 설정 완료후 클라이언트에서 PrismaClient를 가져와 사용
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

const allUsers = await prisma.user.findMany()
const allUsers = await prisma.user.findMany({
  include: { posts: true },
})
const filteredPosts = await prisma.post.findMany({
  where: {
    OR: [
      { title: { contains: 'prisma' } },
      { content: { contains: 'prisma' } },
    ],
  },
})
const user = await prisma.user.create({
  data: {
    name: 'Alice',
    email: 'alice@prisma.io',
    posts: {
      create: { title: 'Join us for Prisma Day 2020' },
    },
  },
})
const post = await prisma.post.update({
  where: { id: 42 },
  data: { published: true },
})
profile
냐아아아아아아아아앙

0개의 댓글