Sequelize を使用して、データ操作を行います。
Contents
Sequelize
Sequelize は、Node.js v4 以降で使える ORM です。PostgreSQL、MySQL、SQLite、MSSQL などをサポートしており、トランザクション、リレーションシップ、レプリケーションなどが可能です。
導入
npm でインストールします。
1 |
$ npm install --save sequelize |
下記から使用するDBにあったコマンドを実行します。
1 2 3 4 5 |
$ npm install --save pg pg-hstore # Postgres $ npm install --save mysql2 $ npm install --save mariadb $ npm install --save sqlite3 $ npm install --save tedious # Microsoft SQL Server |
設定
今回は MySQL で設定します。
config ファイルを作って下記を設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const Sequelize = require('sequelize'); const sequelize = new Sequelize('mysql://username:password@dbhost:3306/dbname', { // }); module.exports = sequelize; # 上または、下のように設定します。 const Sequelize = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { dialect: 'mysql', host: 'localhost', port: 3306, }) module.exports = sequelize; |
定義
モデルを定義します。
1 2 3 4 |
const User = sequelize.define( 'user'、{ username: Sequelize.STRING, number: Sequelize.INTEGER }); |
DB 操作
データの取得、追加、更新、削除を行ってみます。
登録
INSERT 文を発行します。
1 2 3 4 |
User.create({ username: 'vistylee'、 number: 123 }); |
複数登録
BULK INSERT を発行します。
1 2 3 4 5 6 7 |
User.bulkCreate([{ username: 'vi'、 number:123 },{ username: 'style'、 number: 456 }]); |
更新
UPDATE 文を発行します。
1 2 3 4 |
User.update({ username: 'vistylee'、 number: 234 }); |
削除
DELETE 文を発行します。
1 |
User.delete(123); |
取得
SELECT 文を発行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
// 1つの要素を探す User.findOne ({ where: { username: 'vistylee', number: 123 } }); // 属性を指定して1つの要素を探す User.findOne ({ where: { username: 'vistylee', number: 123 }, attributes: ['username'] }); // 要素を探して、無ければ作成する User.findOrCreate ({ where: { username: 'vistylee' }, defaults: { number: 123 } }); // 要素を探して、合計数も取得する User.findAndCountAll({ where: { number: 123 }, limit: 10 }); // 複数の要素を探す User.findAll({ where: { number: 123 }, limit: 10 }); |
カウント
SELECT 文を発行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// カウント User.count(); // 条件付きカウント User.count({ where: { 'id': { gt: 10 } } }); // 最大値を取得 User.max('number'); // 最小値を取得 User.min('number'); |
トランザクション
トランザクションを使用して作成を行います。
1 2 3 4 5 6 7 8 9 10 11 |
sequelize.transaction(function (t) { User.create({ username: 'vi'、 number: 123 }, {transaction: t}); User.create({ username: 'style'、 number: 234 }, {transaction: t}); }); |
まとめ
ORM として、簡単な処理を行えました。ただ、アソシエーションしたモデルで両方更新を行うことは出来なさそうでしたので、トランザクションをかけてモデルごとに処理することになりそうです。