sequelize とは
Node.js 上で ORM(Object-Relational Mapping) を提供するライブラリです。
Sequelize(シィークゥアラァィズ) を利用するために役立つコマンドを提供してくれます。
インストール
npm install -g sequelize-cli
npm install sequelize
データベースに MySQL を利用するなら次のコマンドも実行します。
npm install mysql2
Node.js 上で ORM(Object-Relational Mapping) を提供するライブラリです。
Sequelize(シィークゥアラァィズ) を利用するために役立つコマンドを提供してくれます。
npm install -g sequelize-cli
npm install sequelize
データベースに MySQL を利用するなら次のコマンドも実行します。
npm install mysql2
次のコマンドを実行すると、sequelize の初期化を行います。
sequelize init
config、migrations、models、seeders のディレクトリが作成されます。
config/config.json の内容を編集します。
mysql がインストールされた環境だと次のようになりました。自身の環境にあわせて編集します。
{
"development": {
"username": "root",
"password": null,
"database": "database_development",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
次のコマンドを実行するとデータベースを作成できます。
sequelize db:create
次のようにすると db_test というデータベースが作成できます。
sequelize-cli db:create --env test
データベースを削除するには次のようにします。
sequelize db:drop
次のコマンドを実行するとモデルが作成できます。
sequelize model:create --underscored --name user --attributes "name:string,age:integer"
sequelize db:migrate
シードファイルを作成するには次のようにします。
sequelize seed:generate --name ファイル名
上記のコマンドを実行すると、「 seeders 」というフォルダができます。その中に「 YYYYMMDDHHMMSS-ファイル名.js 」というファイルがあります。
「 sequelize seed:generate --name users 」という風に実行した場合、ファイルの中は次のようになります。
'use strict';
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up (queryInterface, Sequelize) {
/**
* Add seed commands here.
*
* Example:
* await queryInterface.bulkInsert('People', [{
* name: 'John Doe',
* isBetaMember: false
* }], {});
*/
},
async down (queryInterface, Sequelize) {
/**
* Add commands to revert seed here.
*
* Example:
* await queryInterface.bulkDelete('People', null, {});
*/
}
};
データを投入するために「 20240504111214-users.js 」ファイルを以下のように編集します。
'use strict';
const data = [{
name: "taro",
mail: "example.com"
},{
name: "hanako",
mail: "example.co.jp"
}];
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up (queryInterface, Sequelize) {
data.forEach((each) => {
each.created_at = new Date();
each.updated_at = new Date();
});
await queryInterface.bulkInsert('users', data, {});
},
async down (queryInterface, Sequelize) {
await queryInterface.bulkDelete('users', null, {});
}
};
シードデータをデータベースに挿入するには次のようにします。
sequelize db:seed:all
一番最後に実行したシードデータを取り消すには次のようにします。
sequelize db:seed:undo
指定したシードデータを削除するには次のようにします。
sequelize db:seed:undo --seed 20240504111214-users.js
「 seeders 」以下のすべてのシードデータを削除するには次のようにします。
sequelize db:seed:undo:all
let db = require('./models/');
db.user.create({
name: 'taro',
age: 20
}).then((result) => {
console.log(result);
db.sequelize.close();
});
let db = require('./models/');
db.user.findAll().then((result) => {
console.log(result);
db.sequelize.close();
});
let db = require('./models/');
db.user.findOne({
where: { id: req.params.id }
}).then((user) => {
console.log(user);
db.sequelize.close();
});
update と save を使う方法があります。
save() は、findOne() などですでにデータを取得している場合などに利用できます。
let db = require('./models/');
db.user.update(
{ name: "hanako", age: 25},
{ where: { id: 1} }
).then((result) => {
console.log(result);
db.sequelize.close();
});
let db = require('./models/');
db.user.findOne(
{ where: { id: 1}}
).then((user) => {
user.name = "hanako";
user.age = 30;
user.save().then(() => {
db.sequelize.close();
});
});
let db = require('./models/');
db.user.findOne(
{ where: { id: 1}}
).then((user) => {
user.destroy().then(() => {
db.sequelize.close();
});
});
var db = require('../models/');
db.user.count({ where: { name: "test"}}).then((total) => {
console.log(total)
});
var db = require('../models/');
db.sequelize.query("SELECT * FROM users WHERE id = '1'").then(users => {
console.log(users);
});
var db = require('../models/');
db.sequelize.query("SELECT * FROM users WHERE id = :id", {
replacements: { id: 1 }
}).then(users => {
console.log(users);
});
replacements を使うとエスケープされるようです。
sequelize で、バリデーションを使うには、次のようにモデルを変更します。
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
const user = sequelize.define(
'user', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
name: {
type: DataTypes.STRING,
validate: {
notEmpty: {
msg: "名前が空欄です。"
}
}
},
age: {
type: DataTypes.INTEGER,
validate: {
notEmpty: {
msg: "年齢が空欄です。"
},
isInt: {
msg: "数字を入力してください。"
}
}
}
}, {
sequelize,
modelName: 'user',
underscored: true,
version: true,
}
);
user.associate = function(models) {
// associations can be defined here
};
return user;
};
var db = require('../models/');
db.user.create({
name: "",
age: 20
}).then((result) => {
console.log(result);
db.sequelize.close();
}).catch((error) => {
console.log(error);
db.sequelize.close();
})