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); //사용자의 댓글
유저 테이블에 추가로 댓글 정보까지 받을수 있다,