본문 바로가기
Node.js/sequelize

sequelize에서 CRUD 사용하기

by honey.kikiki 2021. 11. 27.
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); //사용자의 댓글

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

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

sequelize  (0) 2021.11.26

댓글