sequelize.jsとは
node環境でDBを操作するための便利なライブラリです。
サーバーサイドをnode.jsで実装する際にexpress.jsと合わせて使用します。
CLIによるモデルの作成とDBマイグレーションについて説明した後、
ORMとしてのサーバーサイドでの呼び出し方法について記載します。
詳細はこちらをご参考ください。→https://sequelize.org/master/
導入方法
npm install --saveする。
npm install --save sequelize
モデルの作成とDBマイグレーション
モデル作成とDBへのマイグレーションはsequelize-cliを使用します。
###インストール
npm install --save sequelize-cli
初期化処理
./node_modules/sequelize-cli/lib/sequelize init
コマンドを打つと、config、migrations、modelsといったディレクトリが作成されます。
config/config.jsonにDBへの接続設定を記入します。
migrationsはマイグレーションの管理をし、
modelsはモデルの管理をします。
モデルの作成
node_modules/.bin/sequelize model:create --name User --attributes userid:string,name:string,photo:text
DBへのマイグレーション
node_modules/.bin/sequelize db:migrate
#2,呼び出し方と使い方
サーバーサイドでの呼び出し方と使い方について記載します。
呼び出し方
#オペレーションの導入(ver4.x~)
const { Op } = require('sequelize');
require('sequelize');
#モデルの定義(cliで作成していた場合)
上記cliで作成したModelを呼び出します。
const { models: { Hoge,Fuga } } = require('cliで作成したモデルのPATH');
#参考:モデルから読み込まれる部分(これがcliで作成したmodelの中に記載されています)
sequelize.define('ModelName', {
id: { type: DataTypes.INTEGER, primaryKey: true },
name: DataTypes.STRING,
}, {
timestamps: false,
});
という感じです。
使い方
シンタックスには若干癖があります。
代表例としてSELECT文とUPDATE文を記載します。
返却されるのはPromiseオブジェクトです。
取得した後にthenのメソッドチェーンなどを使用することも可能です。
# SELECT (SELECT userid as fuga,name FROM Hoge WHERE userid = userid)
Hoge.findAll({
attributes: [['userid', 'fuga'],['name', 'name']],
where: {[Op.or]: [{userid: {[Op.eq]: userid}}]},
}));
# UPDATE (UPDATE Hoge SET userid=userid,name=name WHERE userid=userid)
Hoge.update({ userid: userid, name: name }, { where: {userid: userid} });
こんなエラーが出た
DeprecationWarning: String based operators are deprecated
という内容のエラーが出ることがあります。
要約すると、古いバージョンの書き方だから非推奨です。ということですが、
"sequelize": "^5.8.6"(4.44.3でエラーが出ました)のような感じでpackage.jsonを書き直すと直ります。
DeprecationWarning: String based operators are deprecated. Please use Symbol based operators for better security, read more at https://sequelize.org/master/manual/querying.html#operators
まとめ
クライアントをjavascriptフレームワーク使うなら、
サーバーサイドもjavascript(node.js)で書きたいということや、
大量のアクセスやリアルタイム処理に強いので、node.jsやexpress.jsを使用したいということもあるかと思います。
その際のDB周りの処理でsequelize.jsは便利です。
お役にたちましたら幸いです。