(Node.js) 계속 (3)

테이블이 데이터베이스에 이미 존재한다면 어떻게 될까요?

이전 게시물에서는 ORM을 사용하여 데이터베이스에서 테이블을 만들고 조작했습니다. 이번에는 이미 준비된 테이블을 가져와 만져 봅니다.

차를 후유증하다

이미 생성된 테이블을 Sequelize로 가져오는 기능이 없었습니다. 찾아보니 Sequelize-auto라는 패키지로 테이블을 가져올 수 있다고 해서 그걸 사용하기로 했습니다.

설치

Sequelize-auto를 사용하기 위해서는 Sequelize용 패키지와 사용하는 RDBMS가 설치되어 있어야 합니다.

npm install mysql2|pg pg-hstore|sqlite3|tedious
npm install sequelize sequelize-cli sequelize-auto

하중 모델

테이블을 로드하려면 다음이 필요합니다.

  1. 테이블이 존재하는 DB명
  2. 호스트 이름
  3. 데이터베이스에 연결할 사용자
  4. 포트 이름
  5. RDBMS 이름
  6. 모델을 저장할 경로
  7. 로드할 테이블의 이름입니다. 모두 로드하려면 X를 입력해야 합니다.

이제 필요한 것이 무엇인지 알았으니 테이블을 로드해 보겠습니다.

sequelize-auto -o "./models" -h 127.0.0.1 -p 3306 -e mysql -d third_project -u root -x (password) -t team

성공하면 다음 파일이 모델에 추가됩니다.

C:.
│init-models.js
│team.js
...

인상

생성된 모델을 데이터베이스에 적용하기 위해서는 마이그레이션이 필요합니다.

먼저 마이그레이션에 사용할 파일을 만듭니다.

sequelize migration:create --name "add_team"

명령을 실행하면 이전에 시더 파일을 생성한 것과 똑같은 파일이 생성됩니다. 여기에 테이블 속성을 작성해 보겠습니다.

'use strict';

/** @type {import('sequelize-cli').Migration} */
module.exports = {
  async up (queryInterface, Sequelize) {
    await queryInterface.createTable('team', {
      team_id: {
        autoIncrement: true,
        type: Sequelize.INTEGER,
        allowNull: false,
        primaryKey: true
      },
      team: {
        type: Sequelize.STRING(100),
        allowNull: false,
        unique: "team"
      },
      league: {
        type: Sequelize.STRING(100),
        allowNull: false
      },
      pl: {
        type: Sequelize.INTEGER,
        allowNull: false
      },
      win: {
        type: Sequelize.INTEGER,
        allowNull: false
      },
      draw: {
        type: Sequelize.INTEGER,
        allowNull: false
      },
      lose: {
        type: Sequelize.INTEGER,
        allowNull: false
      },
      gf: {
        type: Sequelize.INTEGER,
        allowNull: false
      },
      ga: {
        type: Sequelize.INTEGER,
        allowNull: false
      },
      gd: {
        type: Sequelize.INTEGER,
        allowNull: false
      },
      pts: {
        type: Sequelize.INTEGER,
        allowNull: false
      }
    });
  },

  async down (queryInterface, Sequelize) {
    await queryInterface.dropTable('team');
  }
};

코드를 작성하고 다음 명령어를 입력하면 마이그레이션이 완료됩니다.

sequelize db:migrate

완료 후 DB:

+--------------------+
| Tables_in_practice |
+--------------------+
| sequelize_tests    |
| sequelizemeta      |
| team               |
+--------------------+