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(SELECTuseridasfuga,nameFROMHogeWHEREuserid=userid)Hoge.findAll({attributes:[['userid','fuga'],['name','name']],where:{[Op.or]:[{userid:{[Op.eq]:userid}}]},}));#UPDATE(UPDATEHogeSETuserid=userid,name=nameWHEREuserid=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は便利です。
お役にたちましたら幸いです。