반응형
prisma 사용하기
아래의 명령어를 터미널에 입력한다.
> npm install prisma --save -dev
> npx prisma init
npx prisma init 명령어를 통해 prisma 사용을 위한 기본 구조가 생성된다.
위와 같은 폴더트리가 생성된다.
.env 파일의 내용을 수정해야 한다.
아래는 mysql 인 경우이다.
DATABASE_URL="mysql://root:mysql비밀번호@localhost:3306/prisma1"
// ex) mysql 비밀번호가 root이면
// DATABASE_URL="mysql://root:root@localhost:3306/prisma1"
// DATABASE_URL="mysql://user:mysql비밀번호@localhost:mysql설정된port/데이터베이스이름"
prisma폴더의 schema.prisma파일 안의 내용도 아래와 같이 변경해줌
// 나는 mysql을 사용하므로 datasource db 안의 provider를 mysql로 수정해줌.
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
데이터베이스의 모델 즉 테이블 생성하려면 위와 같은 파일 안에 아래와 같이 작성
model User {
Id Int @id @default(autoincrement())
username String
contact String @unique
createdAt String?
updatedAt String?
wallet String?
}
위와 같이 작성 후
> npx prisma db push
생성한 테이블들을 연결된 데이터 베이스에 반영하여 주는 명령어이다.
> npx prisma db pull
연결된 데이터베이스 있는 테이블을 현재 서버에 불어와 생성하여 준다.
✅ 테이블 간 관계설정
// models.ts
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
role Role @default(USER)
posts Post[]
profile Profile?
}
model Profile {
id Int @id @default(autoincrement())
bio String
user User @relation(fields: [userId], references: [id])
userId Int
}
// Profile의 userId는 User의 id와 연결됨
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
title String
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
categories Category[] @relation(references: [id])
}
// Post는 authorId를 통해 User의 id와 연결
model Category {
id Int @id @default(autoincrement())
name String
posts Post[] @relation(references: [id])
}
enum Role {
User
Admin
}
출처 prisma 공식문서
✅ CRUD 작업시 사용법
> npm install @prisma/client
> prisma generate // Generate Prisma Client
// @prisma/client를 통해 CRUD 작성 가능
prisma.ts 또는 prisma.js 파일 생성 후
import {PrismaClient} from '@prisma/client';
export const prisma = new PrismaClient({});
사용하려는 파일 내에서 위의 파일을 불러와서 사용한다.
아래와 같이 사용
import * as express from 'express';
import {prisma} from '../prisma'
// 위의 경로는 실제 파일이 위치하는 경로를 설정.
export async function userCreate (req:express.Request,res:express.Response,next:express.NextFunction){
try{
const {username,contact} = req.body
console.log(username,contact)
const result = await prisma.user.create({
data:{
username:'mihee2',
contact:'010-1111-11112'
}
})
res.json(result)
}catch(e){
console.error(e)
}
}
조건이 여러개인 경우
const result = await prisma.myTable.findMany({
where: {
AND: [
{ webId: id },
{ succeed: false }
]
},
orderBy: {
createdAt: 'desc'
},
take: 1
});
페이지 처리시
const result = await prisma.myTable.findMany({
skip: take * (page - 1),
take: take
})
특정 컬럼값만 가져오기
const result = await prisma.myTable.findUnique({
where: {
id: id
},
select: {
name: true,
age: true,
gender: true
}
})
해당하는 데이터가 존재하면 데이터 업데이트 하고, 없으면 새롭게 생성
const result = await prisma.myTable.upsert({
where: {
id: id
},
update: {
token: refreshToken,
},
create: {
token: refreshToken
}
});
수량이 0보다 큰 값 가져오기
const product = await prisma.product.findMany({
where: {
qty: {
gt: 0
}
}
});
특정 컬럼값들의 수량 가져오기
const result = await prisma.item.aggregate({
where: {
AND: [
{name: 'skirt'},
{name: 'pants'}
]
},
_sum: {
qty: true
}
});
출처
https://www.prisma.io/express#express-tabs
https://www.prisma.io/docs/getting-started/quickstart
https://www.prisma.io/docs/concepts/components/prisma-client/crud
https://www.prisma.io/docs/concepts/database-connectors/mysql
반응형
'Javascript > Node.js' 카테고리의 다른 글
[ Node.js ] - node.js란? ( + 기본 코드 ) (0) | 2022.06.10 |
---|---|
[ Node.js ] - 서버 DDos 공격 막기 (0) | 2022.06.02 |
[ Node.js ] - axios와 node-fetch로 통신하기 (0) | 2022.06.02 |
[ Node.js ] - swagger-ui (0) | 2022.04.05 |
[ Node.js ] - express-session (0) | 2022.04.05 |