1. 소개
Prisma는 관계형 데이터베이스를 애플리케이션에서 타입 안전한 모델로 변환해주는 ORM입니다.
2. 작업 순서
Step 1. Alembic으로 데이터베이스 테이블 생성하기
- alembic으로 데이터베이스 구조를 생성합니다. Alembic은 우리 애플리케이션에서 데이터베이스 마이그레이션을 실행하는 주요 도구입니다. Prisma로도 이 작업이 가능하지만, Alembic은 Python 문법과 raw SQL 쿼리를 통해 더 많은 기능과 유연성을 제공합니다.
alembic revision -m "create table posts"
alembic upgrade head
Step 2. Prisma 설치하기
Python과 Javascript 모두에서 Prisma를 사용하기 위해서는 다음 버전을 사용해야 합니다.
prisma-client-py: 0.15.0
prisma: 5.19.0
Python과 Javascript 모두를 위한 Prisma 설치 https://www.prisma.io/
npm install prisma
https://prisma-client-py.readthedocs.io/en/stable/
Python
pip install prisma
Step 3. Prisma 스키마 파일 생성하기
npx prisma db pull
이 명령어는 데이터베이스를 읽고 테이블 정보를 가져옵니다.
prisma/schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-py"
recursive_type_depth = "5"
interface = "asyncio"
}
generator js {
provider = "prisma-client-js"
previewFeatures = ["views"]
}
model alembic_version {
version_num String @id(map: "alembic_version_pkc") @db.VarChar(32)
@@ignore
}
model posts {
id String @id @db.Uuid
name String
contents String
url String @unique
source_id String @db.Uuid
tag_count Int @default(0)
image_count Int @default(0)
hit Int @default(0)
meta Json? @default("{}")
published_at DateTime @db.Timestamptz(6)
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @default(now()) @db.Timestamptz(6)
post_categories PostCategory[]
post_images PostImage[]
post_tags PostTag[]
source Source @relation(fields: [source_id], references: [id], onDelete: Cascade)
@@index([source_id], map: "idx_posts_source_id")
}
4. 필요에 따라 schema.prisma 파일 수정하기
일반적으로 모델 이름은 카멜케이스와 단수형으로, 데이터베이스 이름은 스네이크케이스와 복수형으로 사용합니다. @@map
키워드를 사용하여 이름을 매핑해야 합니다.
model Post {
...
@@map("posts")
}
5. 모델이 준비되면 prisma generate를 실행하여 Prisma 클라이언트 생성하기
npx prisma generate
이 명령어는 Javascript와 Python 모두를 위한 클라이언트를 생성합니다.
6. Javascript에서 사용하기
import prisma from "@/lib/prisma"
const posts = await prisma.post.findMany({
take: 10,
orderBy: {
created_at: 'desc'
}
})
7. Python에서 사용하기
from src.db.prisma import prisma, requires_connection
posts = await prisma.post.findMany({
take: 10,
orderBy: {
created_at: 'desc'
}
})
3. 결론
prisma
를 사용하면 Javascript와 Python 모두에서 데이터베이스 모델을 쉽게 다룰 수 있습니다.