과거 프로그래밍 자료들/프로젝트
sql 오류 및 sequelize 정리
평부
2022. 9. 1. 14:07
1) 문제 : WHERE parameter "id" has invalid "undefined" value
-> patch 사용 중 id값이 계속 전달되지 않음
참고한 내용
//수정 전
router.patch("/:deleteId", function (req, res, next) {
const deleteId = req.params.id;
//수정 후
router.patch("/:deleteId", function (req, res, next) {
const deleteId = req.params.deleteId;
//수정 후(다른 버전)
router.patch("/:id", function (req, res, next) {
const deleteId = req.params.id;
2) sql내 모든 값들을 업데이트 하고 싶어함
오류 원인
code: 'ER_TRUNCATED_WRONG_VALUE',
errno: 1292,
sqlState: '22007',
sqlMessage: "Truncated incorrect INTEGER value: 'allStatus'",
sql: 'UPDATE `words` SET `status`=?,`updatedAt`=? WHERE (`deletedAt` IS NULL AND `id` = ?)',
parameters: [ 'C', '2022-09-01 04:24:24', 'allStatus' ]
-> axios로 넘기는 주소를 "/word/allStatus"로 하니 오류 발생
-> allStatus가 문제라기 보단, `id`=? 내 id값 즉 숫자가 들어가지 않아 생긴 오류
-> /status/1로 변경
//오류 코드
router.patch("/allStatus", function (req, res, next) {
try {
// const wordId = req.params.wordId;
Word.update(
{
status: req.body.status,
},
{
where: {
id: {
[Op.gt]: 0,
},
},
}
);
console.log("req.body", req.body);
console.log("req.body.status", req.body.status);
res.send("update done");
// res.redirect("/index");
} catch (err) {
console.error(err);
next(err);
}
})
//변경된 코드
router.patch("/status/1", function (req, res, next) {
try {
// const wordId = req.params.wordId;
Word.update(
{
status: req.body.status,
},
{
where: {
id: {
[Op.gt]: 0,
},
},
}
);
console.log("req.body", req.body);
console.log("req.body.status", req.body.status);
res.send("update done");
// res.redirect("/index");
} catch (err) {
console.error(err);
next(err);
}
SQL문과 sequelize 문 비교
- SELECT
//SQL
select english, korean, type, status from engWord_sns.words
where (status = "A" or status = "C") and type = "easy" order by createdAt DESC;
//sequelize
//model은 Word
Word.findAll({
include: {
model: User,
attributes: ["id"],
},
attributes: ["id", "english", "korean", "status"],
where: {
[Op.or]: [{ status: "A" }, { status: "C" }],
type: "easy",
},
order: [["createdAt", "DESC"]],
});
- CREATE
//SQL
insert into engWord_sns.words
(english, korean, type, status) values ("test", "테스트", "easy", "A");
//sequelize
//model은 Word
Word.create({
// 단어 등록
UserId: req.user.id,
english,
korean,
type,
status: "A",
});
- UPDATE
* 두 번째 update의 경우
'2) sql내 모든 값들을 업데이트 하고 싶어함' 참고
//1개만 수정
//SQL
update engWord_sns.words set english = "water", korean = "물" where id = 12;
//sequelize
//model은 Word
Word.update(
{
//프론트에서 input id="english"에서 값을 전달 받을 경우 req.body.english
//프론트에서 input id="korean"에서 값을 전달 받을 경우 req.body.korean
english: "water",
korean: "물"
},
{
where: { id: 12 }, //word의 id, 프론트에서 전달받을 경우 id는 req.params.id로 지정
}
)
//전체 수정
//SQL
update engWord_sns.words set status = "A" where id >= 0;
//
Word.update(
{
status: "A"
},
{
where: {
id: {
[Op.gt]: 0, //0보다 큰 경우 적용
//이 경우 router.patch("/status/1", function (req, res, next)
//{ try{Word.update(...)}catch{}}로 적용해야 함
},
},
}
);
- COUNT
//개수세기
//SQL
select count(*) from engWord_sns.words where UserId = 1;
//sequelize
//model은 Word
Word.count({
where: {
UserId: 1,
},
});
* 시퀄라이즈 자세한 문법 설명
https://sebhastian.com/sequelize-count/