utamt engineer blog

アプリケーション開発について学んだことの備忘録です。

Sequelize + MySQL

インストール

npm init した上で、パッケージをインストールする。

$ npm install sequelize --save
$ npm install mysql2 --save

コマンドもインストールしておく。

$ npm install -g sequelize-cli

設定ファイルの編集

必要なディレクトリ /config, /migration, /model, /seeders を作成する。

$ sequelize init

DB 接続のための設定ファイル /config/config.json を編集する。

{
  "development": {
    "username": "root",
    "password": "root",  // パスワード: "root" に変更
    "database": "database_development",  // 適当なDB名
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": "root",
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": "root",
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

Model の作成

config.json の設定を元に、DB を作成する。

sequelize db:create

以下で、models/user.jsmigrations/$(実行時刻)-user.js が作成する。

$ sequelize model:create --underscored --name User --attributes "column1:string,clomun2:string"
models/user.js
'use strict';
const { Model } = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class User extends Model {
    static associate(models) {
    }
  };
  User.init({
    column1: DataTypes.STRING,
    column2: DataTypes.STRING,
  }, {
    sequelize,
    modelName: 'User',
    underscored: true,
  });
  return Logic;
};
migrations/$(実行時刻)-user.js
'use strict';
module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('User', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      column1: {
        type: Sequelize.STRING
      },
      column2: {
        type: Sequelize.STRING
      },
      created_at: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updated_at: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('User');
  }
};

migration ファイルを元に、DB に Model(テーブル)を作成する。

$ sequelize db:migrate --env development  // --env で環境を指定可能

その他の操作。

$ sequelize db:migrate:status   // migration ファイルの一覧表示
$ sequelize db:migrate:undo --name <migration name>   // 元に戻す

DB 操作

DB への INSERT、SELECT のクエリを以下で実現できる。

/routes/index.js
const router = require("express").Router();
const db = require('../models');

router.get('/seq', (req, res) => {

	// データ追加
	db.User.create({
		column1: "aaa",
		column2: "bbb",
		created_at: new Date(),
		updated_at: new Date()
	});

	// 全件データ取得
	db.User.findAll().then(users => {
		res.send(users);
	});

	// 特定のデータ取得
	db.User.findOne({ where: {id: 1} }).then(user => {
		res.send(user);
	});
});

module.exports = router;