Node.js/sequelize

sequelize에서 CRUD 사용하기

honey.kikiki 2021. 11. 27. 02:29
728x90

Sequelize의 CRUD

시퀄라이즈에서 CRUD(Create, Read, Update, Delete) 작업은 sql문을 자바스크립트를 통해 만든다. SQL 쿼리와 비교하면서 시퀄라이즈 쿼리를 알아보자.

 

Create

프론트로 부턴 받은 데이터 저장한는 방법은 create 메서드를 사용하면 된다.

/* SQL */
INSERT INTO users (name, age, married) VALUES('honey', 26, 0);

/* 시퀄라이즈 */
User.create({
  name: 'honey',
  age: 26,
  married: false
});

조회시 없으면 생성해주는 메서드 : findOrCreate

/* 시퀄라이즈 */
User.findOrCreate({
  where: { name : 'honey'},
  defaults: { 
    name: 'honey',
    age: 26,
    married: false
  },
});

 

조회 시 없으면 생성 후 조회하는 함수 메서드 : findCreateFind

/* 시퀄라이즈 */
User.findCreateFind({
  where: { name : 'honey'},
  defaults : {
    name: 'honey',
    age: 26,
    married: false
   }
});

 

Read

읽어오기 또는 조회하기로 생각하면 된다. 데이터를 가져 오기 위해서는 findOne, findAll 메서드를 사용하면된다.

 

모든데이터 가져오기 : findAll

/* SQL */
SELECT * FROM users;

/* 시퀄라이즈 */
User.findAll({});

하나의 데이터 가져오기 : findOne

/* SQL */
SELECT * FROM users LIMIT 1;

/* 시퀄라이즈 */
User.findOne({
 where: { option }
});

특정 데이터 가져오기  : attributes

/* SQL */
SELECT name, married FROM users;

/* 시퀄라이즈 */
User.findAll({
  attributes: ['name', 'married']
});

조건부 조회 : where, Op 객체

where : 조회할 칼럼의 조건문을 정하는 옵션.

/* SQL */
SELECT name, age FROM users WHERE married = 1 AND age > 20;

/* 시퀄라이즈 */
User.findAll({
  attributes: ['name', 'age'],
  where: {
    married: 1,
    age: {[Op.gt]: 20}
  }
});
/* SQL */
SELECT id, name FROM users WHERE married = 0 OR age < 20;

/* 시퀄라이즈 */
User.findAll({
  attributes: ['name', 'age'],
  where: {
    [Op.or]: [{ married: 0 }, { age: {[Op.lt]: 40} }]
  }
});

자주 쓰이는 Op객체 정리

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

정렬 옵션 :  order

User.findAll({
  attributes: ['name', 'age'],
  order: [['age', 'DESC']]
});
DESC 내림차순 
ASC 오름차순

조회할 레코드 개수 설정 [limit, offset]

조회할 레코드 개수 설정 : limit, offset

limit : 조회하는 레코드의 개수를 정하는 옵션.
offset : 몇 번째부터 조회할지 정하는 옵션.

/* 시퀄라이즈 */
User.findAll({
  attributes: ['name', 'age'],
  order: [['age', 'DESC']],
  limit: 1,
});

/* 시퀄라이즈 */
User.findAll({
  attributes: ['name', 'age'],
  order: [['age', 'DESC']],
  limit: 1,
  offset: 1
});

update

/* SQL */
SELECT users SET comment = '수정할 내용' WHERE id = 3;
​
/* 시퀄라이즈 */
User.update({
  comment: '수정할 내용'
}, {
  where: { id: 3 }
});

destory

/* SQL */
DELETE FROM users WHERE id = 4;
​
/* 시퀄라이즈 */
User.destory({
  where: { id: 4 }
});

 관계 쿼리 include

const user = await User.findOne({
    include: [{
        model: Comment
    }]
});
console.log(user.Comments); //사용자의 댓글

유저 테이블에 추가로 댓글 정보까지 받을수 있다,