0
0

More than 3 years have passed since last update.

sequelize.jsを使ってみる。

Posted at

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,呼び出し方と使い方

サーバーサイドでの呼び出し方と使い方について記載します。

呼び出し方

hoge.js
#オペレーションの導入(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のメソッドチェーンなどを使用することも可能です。

hoge.js
# 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は便利です。
お役にたちましたら幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0