Prisma를 위한 Drizzle 확장

Prisma를 사용하는 기존 프로젝트가 있고, Drizzle을 시도하거나 점진적으로 도입하고 싶다면,
우리의 퍼스트클래스 확장 기능을 사용할 수 있습니다. 이 확장 기능은 Prisma 클라이언트에 Drizzle API를 추가하여,
기존 데이터베이스 연결을 재사용하면서 Prisma 쿼리와 함께 Drizzle을 사용할 수 있게 해줍니다.

사용 방법

의존성 설치

Drizzle와 Prisma 스키마에서 Drizzle 스키마를 생성해주는 제너레이터 패키지를 설치해야 합니다.

npm
yarn
pnpm
bun
npm i drizzle-orm@latest
npm i -D drizzle-prisma-generator

Prisma 스키마 업데이트

Prisma 스키마에 Drizzle 생성기를 추가합니다. output은 생성된 Drizzle 스키마 TS 파일이 저장될 경로입니다.

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

generator drizzle {
  provider = "drizzle-prisma-generator"
  output   = "./drizzle" // 생성된 Drizzle 테이블 파일이 저장될 경로
}

// 나머지 Prisma 스키마

datasource db {
  provider = "postgresql"
  url      = env("DB_URL")
}

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

...

Drizzle 스키마 생성하기

prisma generate

위 명령어를 실행하면 Prisma 클라이언트가 생성되고, 데이터베이스 스키마에 기반한 타입 안전한 쿼리 빌더를 사용할 수 있습니다. 이 명령어는 프로젝트 루트 디렉토리에서 실행해야 합니다.

Prisma 클라이언트에 Drizzle 확장 추가하기

PostgreSQL
MySQL
SQLite
import { PrismaClient } from '@prisma/client';
import { drizzle } from 'drizzle-orm/prisma/pg';

const prisma = new PrismaClient().$extends(drizzle());

prisma.$drizzle를 통해 Drizzle 쿼리 실행하기 ✨

Drizzle 쿼리 빌더를 사용하려면 Drizzle 테이블에 대한 참조가 필요합니다. 이 참조는 여러분이 제너레이터 설정에서 지정한 출력 경로에서 가져올 수 있습니다.

import { User } from './drizzle';

await prisma.$drizzle.insert().into(User).values({ email: 'sorenbs@drizzle.team', name: 'Søren' });
const users = await prisma.$drizzle.select().from(User);

제한 사항