Prisma를 위한 Drizzle 확장
Prisma를 사용하는 기존 프로젝트가 있고, Drizzle을 시도하거나 점진적으로 도입하고 싶다면,
우리의 퍼스트클래스 확장 기능 을 사용할 수 있습니다. 이 확장 기능은 Prisma 클라이언트에 Drizzle API를 추가하여,
기존 데이터베이스 연결을 재사용하면서 Prisma 쿼리와 함께 Drizzle을 사용할 수 있게 해줍니다.
사용 방법
의존성 설치 Drizzle와 Prisma 스키마에서 Drizzle 스키마를 생성해주는 제너레이터 패키지를 설치해야 합니다.
npm i drizzle-orm@latest
npm i -D drizzle-prisma-generator
yarn add drizzle-orm@latest
yarn add -D drizzle-prisma-generator
pnpm add drizzle-orm@latest
pnpm add -D drizzle-prisma-generator
bun add drizzle-orm@latest
bun add -D drizzle-prisma-generator
Prisma 스키마 업데이트 Prisma 스키마에 Drizzle 생성기를 추가합니다. output
은 생성된 Drizzle 스키마 TS 파일이 저장될 경로입니다.
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 확장 추가하기 import { PrismaClient } from '@prisma/client' ;
import { drizzle } from 'drizzle-orm/prisma/pg' ;
const prisma = new PrismaClient () .$extends ( drizzle ());
import { PrismaClient } from '@prisma/client' ;
import { drizzle } from 'drizzle-orm/prisma/mysql' ;
const prisma = new PrismaClient () .$extends ( drizzle ());
import { PrismaClient } from '@prisma/client' ;
import { drizzle } from 'drizzle-orm/prisma/sqlite' ;
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);
제한 사항
관계형 쿼리 는 Prisma 드라이버 제한 사항 으로 인해 지원되지 않습니다. 이로 인해 Prisma는 관계형 쿼리가 작동하기 위해 필요한 배열 형식으로 쿼리 결과를 반환할 수 없습니다.
SQLite에서는 .values()
(예: await db.select().from(table).values()
)가 위와 같은 이유로 지원되지 않습니다.
준비된 문장(Prepared statements) 지원은 제한적입니다. Prisma가 준비된 쿼리를 위한 API를 제공하지 않기 때문에, .prepare()
는 Drizzle 측에서만 SQL 쿼리를 빌드합니다.