coding/Node.js

sequelize CRUD 사용법

JIN_Coder 2022. 8. 2. 21:35

테이블 조회(findAll, findOne)

findAll

쿼리 결과를 배열 객체로 반환

조건에 맞는 데이터 전부를 배열로 반환한다.

const { User } = require('./models');

// 유저 테이블 안에 있는 모든 데이터를 가져옴
const user = User.findAll({})

// age가 20인 데이터들을 가져옴
const user = User.findAll({where:{age:20}})

 

findOne

쿼리 결과를 객체로 반환

조건에 맞는 데이터 하나만 객체로 반환한다.

const { User } = require('./models');

// 조건에 맞는 데이터 하나만 가져온다.
const user = User.findOne({})

// 이름이 jin인 데이터 하나만 가져온다.
const user = User.findOne({where:{name:jin})

 

조건조회(attributes, where, Op, order)

attributes : 옵션을 사용하여 원하는 컬럼(열)만 가져 올 수 있다.

where : 조건을 지정하여 원하는 데이터를 가져 올 수 있다.(기본적으로 조건은 and)

Op : 특수 연산자

order : 정렬(2차원 배열의 형태)

const { User } = require('./models');
const { Op } = require('sequelize');

const user = User.findAll(
	{attributes:['name', 'age']},
	{where:{
		married:ture,
		age:{[Op.gt]:30}
		}
	},
	order:[['age':'DESC'], ['name':'ASC']],
)

// where은 married가 true이고, age가 30 초과인 데이터만 가져오는데
// OP.gt는 초과를 의미
// attributes는 가져올 데이터의 name과 age의 키와 값만 가져오게 설정한다.
// age를 기준으로 내림차순하고, 그 후에 name을 기준으로 오름차순으로 정렬한다.

 

특수연산자 Op

Op.gt : 초과
Op.gte : 이상
Op.lt : 미만
Op.lte : 이하
Op.ne : 같지 않음
Op.or : 또는
Op.in : 배열 요소 중 하나
Op.notIn : 배열 요소와 모두 다름

const { Op } = require('sequelize');
 
[Op.and]: [{a: 5}, {b: 6}] // (a = 5) AND (b = 6)
[Op.or]: [{a: 5}, {a: 6}]  // (a = 5 OR a = 6)
 
[Op.gt]: 6,                // > 6
[Op.gte]: 6,               // >= 6
 
[Op.lt]: 10,               // < 10
[Op.lte]: 10,              // <= 10
 
[Op.ne]: 20,               // != 20
[Op.eq]: 3,                // = 3
 
[Op.is]: null              // IS NULL
[Op.not]: true,            // IS NOT TRUE
 
[Op.between]: [6, 10],     // BETWEEN 6 AND 10
[Op.notBetween]: [11, 15], // NOT BETWEEN 11 AND 15
 
[Op.in]: [1, 2],           // IN [1, 2]
[Op.notIn]: [1, 2],        // NOT IN [1, 2]
 
[Op.like]: '%hat',         // LIKE '%hat'
[Op.notLike]: '%hat'       // NOT LIKE '%hat'
[Op.startsWith]: 'hat'     // LIKE 'hat%'
[Op.endsWith]: 'hat'       // LIKE '%hat'
[Op.substring]: 'hat'      // LIKE '%hat%'
 
[Op.regexp]: '^[h|a|t]'    // REGEXP/~ '^[h|a|t]' (MySQL/PG only)
[Op.notRegexp]: '^[h|a|t]' // NOT REGEXP/!~ '^[h|a|t]' (MySQL/PG only)
 
[Op.like]: { // LIKE ANY ARRAY['cat', 'hat'] - also works for iLike and notLike
	[Op.any]: ['cat', 'hat']
} 
 
[Op.gt]: { // > ALL (SELECT 1)
	[Op.all]: literal('SELECT 1') 
}

 

 

데이터 생성(create)

create

모델을 불러와 create으로 데이터 1개(로우)(행)을 생성한다.

const { User } = require('./models');

const user = User.create({
	name: jin,
    age: 28,
   	married: false,
    comment: "hello"
})

데이터를 넣을 때  MySQL의 자료형이 아닌 시퀄라이즈 모델에 정의한 자료형대로 넣어야 한다.

 

 

데이터 수정(update)

update

첫번째 인자는 수정할 내용, 두번째 인자는 어떤 데이터를 수정할지에 대한 조건

const { User } = require('./models');

const user = User.update(
	{married: true},
	{where:{name: jin}}
)

// name이 jin인 데이터의 married를 true로 바꾼다.

 

 

데이터 삭제(destory)

destroy

데이터 삭제는 delete가 아닌 distroy를 사용

const { User } = require('./models');

const user = User.destroy({where:{name: jin}})
// name이 jin 인 데이터 삭제

const user = User.destroy({
	where:{age: [Op.lte]: 20}
})
// age가 20 이하인 데이터 삭제

 

 

 

 

[ORM] 📚 시퀄라이즈 - 쿼리 문법 정리

시퀄라이즈 쿼리문 CRUD 작업을 하기 위해선 먼저 시퀄라이즈 쿼리를 알아야한다. SQL문을 자바스크립트로 생성하는 것이기 때문에, 시퀄라이즈의 방식을 사용해야 한다. 시퀄리아지 쿼리문을 비

inpa.tistory.com

'coding > Node.js' 카테고리의 다른 글

nodemon  (0) 2022.08.04
모듈(module), require(), IIFE  (0) 2022.08.03
package.json  (0) 2022.07.31
npm jsonwebtoken  (0) 2022.07.29
Express의 미들웨어  (0) 2022.07.23