[Sequelize]에서 CRUD 다루기
Sequelize의 CRUD
시퀄라이즈에서 CRUD(Create, Read, Update, Delete) 작업은 sql문을 자바스크립트를 통해 만든다. SQL 쿼리와 비교하면서 시퀄라이즈 쿼리를 알아보자. 쿼리는 프로미스를 반환하므로 then이나 async/await문법으로 다룰 수 있다.
🦠 레코드(ROW) 생성
레코드를 생성하기 위해선 models에서 불러온 모델을 바탕으로, create메서드를 사용하면 된다.
/* SQL */
INSERT INTO users (name, age, married) VALUES('bob', 27, 0);
/ 시퀄라이즈 /
User.create({
name: 'bob,
age: 27,
married: false
});
🔎 레코드(ROW) 조회
레코드를 조회하기 위해선, findOne, findAll 메서드를 사용한다.
◼ 모든 데이터 [findAll]
/ SQL /
SELECT * FROM users;
/ 시퀄라이즈 /
User.findAll({});
◼ 하나의 데이터 [findOne]
/ SQL /
SELECT FROM users LIMIT 1;
/ 시퀄라이즈 */
User.findOne({});
◼ 특정 필드(Column) [attributes 옵션 사용]
/ SQL /
SELECT name, married FROM users;
/ 시퀄라이즈 /
User.findAll({
attributes: ['name', 'married']
});
◼ 기본적인 조건부 조회 [where, Op 객체]
데이터를 쿼리할때 사용하는 연산자 Op객체
/ 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객체 설명
Op.gt 초과
Op.gte 이상
Op.lt 미만
Op.lte 이하
Op.ne 같지 않음
Op.or 또는
Op.in 배열 요소 중 하나
Op.notIn 배열 요소와 모두 다름
◼ 정렬하기 [order]
/ SQL /
SELECT id, name FROM users ORDER BY age DESC;
/ 시퀄라이즈 /
User.findAll({
attributes: ['name', 'age'],
order: [['age', 'DESC']]
});
◼ 조회할 레코드 개수 설정 [limit, offset]
/ SQL /
SELECT id, name FROM users ORDER BY age DESC LIMIT 1;
/ 시퀄라이즈 /
User.findAll({
attributes: ['name', 'age'],
order: [['age', 'DESC']],
limit: 1,
});
/ SQL /
SELECT id, name FROM users ORDER BY age DESC LIMIT 1 OFFSET 1;
/ 시퀄라이즈 /
User.findAll({
attributes: ['name', 'age'],
order: [['age', 'DESC']],
limit: 1,
offset: 1
});
🔧 레코드(ROW) 수정 [update]
/ SQL /
SELECT users SET comment = '수정할 내용' WHERE id = 3;
/ 시퀄라이즈 /
User.update({
comment: '수정할 내용'
}, {
where: { id: 3 }
});
✂ 레코드(ROW) 삭제 [destory]
/ SQL /
DELETE FROM users WHERE id = 4;
/ 시퀄라이즈 /
User.destory({
where: { id: 4 }
});
👯 관계 쿼리(JOIN) [include]
User와 Comment가 hasMany-belongsTo(1:N)관계를 맺고 있다고 가정하자. 관계 쿼리를 사용하기 위해선 include를 사용하면 된다.
const user = await User.findOne({
include: [{
model: Comment
}]
});
console.log(user.Comments); //사용자의 댓글
위와같이 user에 프로미스의 결과물을 넣었는데, 그 결과로 모델이 반환된다. 이 반환된 값을 결과물을 다룰 수 있다.
출처 :https://spicycookie.me/Nodejs/sequelizecrud/
Author And Source
이 문제에 관하여([Sequelize]에서 CRUD 다루기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@limyt0909/Sequelize에서-CRUD-다루기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)