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.js
と migrations/$(実行時刻)-user.js
が作成する。
$ sequelize model:create --underscored --name User --attributes "column1:string,clomun2:string"
'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;
};
'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 のクエリを以下で実現できる。
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;