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"
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;