[데이터베이스/ORM] Sequlize 관련 참조사항 1

Hyo Kyun Lee·2021년 12월 16일
0

데이터베이스/ORM

목록 보기
9/12

1. 개요

RDB를 연결하는 가장 대표적인 ORM 도구인 Sequelize는 직접 Query를 작성하지 않고도, javascript에 친숙한 문법을 통해 DB를 다룰 수 있도록 도와주기 때문에 굉장히 편하다.

일단 DB를 PostgreSQL를 사용한다는 가정 하에, Sequelize를 활용할 경우 알아두면 좋을 사항들을 잘 유의하면서 사용하도록 한다.

2. Sequelize를 통해 DB update 메소드를 사용하는 경우

DB의 특정 field를 update할 수 있다.

아래와 같이 sequelize의 update를 활용하면 특정 field 내용을 변화(update)시킬 수 있다.

이때 update할 내용을 첫번째 인자에 반영하며, 두번째 인자에는 where절로 어떤 해당 field가 속하는 row(record)를 특정시켜주어야 한다.

await db.PostView.update({
                    field: after_update_value
                }, {
                    where: {
                        field: field_attribute
                    }
                });

만약 특정 field의 값을 그대로 가져와 counting하는 경우, sequelize를 통한 count는 불가능(특정 field 값은 백엔드 level에서 undefined)하다.

이와 같이 sequelize를 통한 update가 힘들 경우, sequelize.literal를 통해 작성한다거나 특정 Query를 직접 정의하는 방법으로 구성할 수 있다.

await db.PostView.update({
                    field : sequelize.literal(
                        'field + 1'
                    )
                }, {
                    where: {
                        field_1: field_1_attribute,
                        field_2: field_2_attribute
                    }
                });

3. DB table을 직접 update하는 경우

DB의 특정 field를 객체로 가져와 직접 update할 수도 있다.

위와 같이 update 메소드를 사용하지 않고, 특정 table / row에 대한 내용을 객체정보로 가져와 직접 update할 수도 있다.

currentTable을 먼저 정의(id값을 받아오고, 이 id값이 field_id값과 동일할 경우)한다.


const currentTable = db.findOne({
	where {
		field_id : id
	}
});

currentTable.field = currentTable.field + 1;
                await currentTable.save();

위 방법을 사용하여 Table 내용을 update할 경우, 반드시 이후에 db.save()를 하여 DB도 해당 정보를 같이 동기화할 수 있도록 해준다.

4. created_at, updated_at

Sequelize를 통해 정의한 table 생성일자(created_at) 및 update일자(updated_at)는 table 속성을 자동으로 인식하여 생성된다.
※ PostgreSQL의 경우엔 적용

위와 같이 sequelize table의 속성을 created_at, update_at으로 설정한 후 이에 대한 DataType을 Date로 설정한다.

created_at: DataTypes.DATE,
updated_at: DataTypes.DATE,

DB가 PostgreSQL일 경우, 아래와 같은 특징이 적용된다.

  • 해당 table이 생성되면 created_at, updated_at에 해당 일자가 저장된다.
  • 내용이 바뀌면 updated_at에 해당 일자로 바뀌어 저장된다.

5. 참조링크

sequelize 특정 field 바꾸기
https://github.com/sequelize/sequelize/issues/7268

0개의 댓글