Posted on:September 16, 2024 at 02:30 AM

Python과 Javascript를 위한 Prisma

Python과 Javascript를 위한 Prisma

1. 소개

Prisma는 관계형 데이터베이스를 애플리케이션에서 타입 안전한 모델로 변환해주는 ORM입니다.

2. 작업 순서

Step 1. Alembic으로 데이터베이스 테이블 생성하기

  1. 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 모두에서 데이터베이스 모델을 쉽게 다룰 수 있습니다.