Node.js 向け ORM のSequelizeを触ってみます。
rails を触っていたときに ORM に興味を持ったので、調べてたら見つけました。
目次
参照資料
実行環境
- Windows10 Pro
- MariaDB 10.3
インストール - コンソールでデータ参照
初期設定
以下コマンドを順に入力し初期設定を行いました。
1 2 3 4 5
| npm init -y npm install --save sequelize npm install --save mysql2 npm install --save-dev sequelize-cli npx sequelize-cli init
|
ここまでで作成されているconfig/config.json
を編集
config.json1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| { "development": { "username": "root", "password": "任意のパスワード", "database": "database_development", "host": "127.0.0.1", "dialect": "mysql" }, "test": { "username": "root", "password": "任意のパスワード", "database": "database_test", "host": "127.0.0.1", "dialect": "mysql" }, "production": { "username": "root", "password": "任意のパスワード", "database": "database_production", "host": "127.0.0.1", "dialect": "mysql" } }
|
データベース作成
config/config.json
の内容に基づいて、データベースを作る。
1
| npx sequelize-cli db:create
|
モデル作成
今回は、名前(name)と、年齢(age)を持つ User モデルを作成する。
1
| npx sequelize-cli model:generate --name User --attributes name:string,age:integer
|
マイグレーション
1
| npx sequelize-cli db:migrate
|
テストデータ設定
以下のコマンドを入力,seders/[数字列]-demo.js
が作成される。
1
| npx sequelize-cli seed:generate --name domo
|
以下のようにseeders/[数字列]-demo.js
を書き換える。
seeders/[数字列]-demo.js1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| "use strict";
module.exports = { up: (queryInterface, Sequelize) => { return queryInterface.bulkInsert( "Users", [ { name: "A-A", age: 30, createdAt: new Date(), updatedAt: new Date(), }, ], {} ); },
down: (queryInterface, Sequelize) => { return queryInterface.bulkDelete("Users", null, {}); }, };
|
1
| npx sequelize-cli db:seed:all
|
ここで、mariadb をコンソールで参照し、テストデータが挿入されていることを確認しておく。
プログラムからデータ参照
Sequelize を用いたデータへのアクセスはやり方がいくつかある。
クエリを直接実行
DB アクセス用のパラメータは param.js に分離しておく。
/src/index.js1 2 3 4 5 6 7 8 9 10 11 12 13
| const Sequelize = require("Sequelize"); const dbParam = require("./param");
const sequelize = new Sequelize( dbParam.database, dbParam.username, dbParam.password, dbParam.options );
sequelize.query("select * from users").then(function (users) { console.log(JSON.stringify(users)); });
|
/src/param.js1 2 3 4 5 6 7 8 9
| module.exports = { database: "database_development", username: "root", password: "任意のパスワード", options: { host: "localhost", dialect: `mysql`, }, };
|
以上をnode ./src/index.js
で実行すると、テーブルの内容がコンソールに表示される。
モデルを利用
index.js1 2 3 4 5
| const models = require("../models");
models.User.findAll().then((users) => { console.log(JSON.stringify(users)); });
|
Sequelize を読み込んで無いように見えるけど、./models/index.js
の中で
const Sequelize = require('sequelize');
されている。
以上をnode ./src/index.js
で実行すると、テーブルの内容がコンソールに表示される。
findAll 他のモデルの操作関数はSequelize - API Reference - Modelに記載がある。
今回は Sequelize を使ってみました。
基本的には、モデル利用でアクセスしないと ORM 使ってる意義がないかなという感じでした。
Express と Sequelize で rails っぽい API サーバを docker で環境用意して作ろうとしたら、Sequelize でつまずいたので、一旦ちゃんと Sequelize のみ取組み。
経験無い・浅い事を複合した問題は、分解しないとだめですね。やっぱり。
ではでは