sequelize の初期化
以下のコマンドを実行し sequelize の初期化を行います。
sequelize init
コマンドを実行した後のディレクトリ構造は、以下のようになります。
- example
- config
- config.json
- migrations
- file
- models
- index.js
- node_modules
- seeders
- file
- package-lock.json
- package.json
- config
config/config.jsonにデータベースの情報を設定します。
{
"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"
}
}
以下のようにファイルを編集します。
{
"development": {
"username": "root",
"password": "password",
"database": "myapp_db_development",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": "password",
"database": "myapp_db_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": "password",
"database": "myapp_db_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
以下のコマンドを実行するとデータベースが作成されます。--env オプションを指定しないと、"development"の内容が作成されます。
sequelize db:create
以下のようにコマンドを実行すると、"test"の内容のデータベースが作成されます。
sequelize db:create --env test
データベースを削除するには、以下のようにします。--env オプションを指定しないと、"development"の内容が削除されます。
sequelize db:drop
以下のようにコマンドを実行すると、"test"の内容のデータベースが削除されます。
sequelize db:drop --env test
モデルの作成
モデルを作成するには、以下のコマンドを実行します。
sequelize model:create --underscored --name user --attributes "name:string, age:integer"
migrations/<タイムスタンプ>-create-<テーブル名>.jsとmodels/user.jsが作成されます。
--underscoredを指定するとモデル定義とデータベースの列名・テーブル名が camelCase から snake_case に自動変換されます。
sequelize model:generate --name UserProfile --attributes firstName:string,lastName:string --underscoredと実行すると以下のモデルが作成されます。
module.exports = (sequelize, DataTypes) => {
const UserProfile = sequelize.define('UserProfile', {
first_name: DataTypes.STRING,
last_name: DataTypes.STRING
}, {
tableName: 'user_profiles',
underscored: true
});
return UserProfile;
};
マイグレーションファイルの実行
以下のコマンドを実行するとマイグレーションファイルを実行します。
sequelize db:migrate
シードデータの作成
シードファイルを作成するには、以下のコマンドを実行します。
# 構文
sequelize seed:generate --name ファイル名
sequelize seed:generate --name users
上記のコマンドを実行すると、「 seeders 」の中に「 YYYYMMDDHHMMSS-ファイル名.js 」というファイルが作成されます。
作成されたシードファイルを以下のように編集します。
'use strict';
const data = [{
name: "taro",
age: 20
},{
name: "hanako",
age: 18
}];
/** @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
データの操作
データの取得
const db = require('./models/');
const User = db.user;
(async () => {
try {
const users = await User.findAll();
console.log(users.map(u => u.toJSON()));
} catch (err) {
console.error(err);
} finally {
await db.sequelize.close();
console.log('接続を閉じました');
}
})();
データの保存
const db = require('./models/');
const User = db.user;
(async () => {
try {
const result = await User.create({ name: "Jon", age: 30 })
console.log(result.toJSON());
} catch (err) {
console.error(err);
} finally {
await db.sequelize.close();
console.log('接続を閉じました');
}
})();
データの更新
const db = require('./models/');
const User = db.user;
(async () => {
try {
const result = await User.update(
{ name: "Maria", age: 25},
{ where: { id: 1} }
);
console.log(result);
} catch (err) {
console.error(err);
} finally {
await db.sequelize.close();
console.log('接続を閉じました');
}
})();
result に入る戻り値は、配列になり更新されたレコード数が入っています。更新されなかった場合や、更新の対象がなかった場合は、0が戻り値になります。
データの削除
const db = require('./models/');
const User = db.user;
(async () => {
try {
const result = await User.destroy(
{ where: { id: 1} }
);
console.log(result);
} catch (err) {
console.error(err);
} finally {
await db.sequelize.close();
console.log('接続を閉じました');
}
})();
result に入る戻り値は、配列になり削除されたレコード数が入っています。更新されなかった場合や、更新の対象がなかった場合は、0が戻り値になります。
where 条件を省略すると全レコードが削除されます。