Prisma용 Drizzle 확장
Prisma를 사용하는 기존 프로젝트에서 Drizzle을 시도하거나 점진적으로 도입하고 싶다면, Prisma 클라이언트에 Drizzle API를 추가하는 일급 확장을 사용할 수 있습니다. 이를 통해 기존 DB 연결을 재사용하면서 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 파일이 저장될 경로입니다.
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 generatePrisma 클라이언트에 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 테이블에 대한 참조가 필요합니다. 제너레이터 설정에서 지정한 output 경로에서 이를 가져올 수 있습니다.
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);제한사항
- Relational queries는 Prisma 드라이버 제한으로 인해 지원되지 않습니다. 이로 인해 Prisma는 관계형 쿼리가 작동하는 데 필요한 배열 형식으로 쿼리 결과를 반환할 수 없습니다.
- SQLite에서는 위와 동일한 이유로
.values()(예:await db.select().from(table).values())가 지원되지 않습니다. - Prepared statements 지원이 제한됩니다 -
.prepare()는 Drizzle 측에서만 SQL 쿼리를 빌드하며, Prisma에는 prepared 쿼리를 위한 API가 없습니다.