sequelizeでデータベースを操作する:SQLと見比べながら
はじめに
こんにちは、SHIFT の開発部門に所属しているmurasawaです。今期よりSHIFTへ中途入社し、バックエンド関連の開発を担当しています。
現在、研修でデータベースやRestAPIについて基本的な事から学んでいます。学んだことをアウトプットすることで理解を深めていくとともに、技術の共有としてもお役に立てれば幸いです。
本記事ではsequelizeでデータベースを操作する際の基本構文を調べるついでに、 それに対応するSQL文を自分なりに調べ対応関係をまとめたいと思います。
※あくまで個人レベルで同じような動作をするSQLを確認して記述しているので、非効率であったり間違っている場合がありますのでコメントなどしていただければ幸いです。
SELECT
sql文のSELECTに当たる操作
findAll()
全行を取得
SQL
SELECT * FROM table_name;
に当たる操作
sequelize
model.table_name.findAll();
もちろんwhere句を使って絞り込みも可能
SQL
SELECT * FROM table_name where name in ('Alice','John');
に当たる操作
sequelize
model.findAll( { where: { name: ['Alice','John'] } });
findByPk()
主キー(id)を使って該当するデータを取得
SQL
SELECT * FROM table_name where id = 1;
に当たる操作。
sequelize
model.findByPk(1);
findOne()
条件に該当する最初のデータを取得
SQL
SELECT * FROM table_name where name = 'Alice' LIMIT 1;
に当たる操作。
sequelize
model.findOne({ where: { name: 'Alice' } });
findOrCreate()
該当するデータがなければ作成。
この操作はsqlでは一行ではできないようです。
SQL
INSERT INTO table_name (name、email, password)
SELECT 'Alice','Alice@example.com','Alicepassword'
WHERE NOT EXISTS (SELECT 1 FROM table_name WHERE name = 'Alice');
SELECT * FROM table_name WHERE name = 'Alice';
に当たる操作。
sequelize
model.findOrCreate({
where: { name: 'Alice' },
defaults: {
name: 'Alice',
email: 'Alice@example.com',
password: 'Alicepassword'
}
INSERT
sql文のINSERTに当たる操作
Create()
データを1行追加する
SQL
INSERT INTO table_name(name、email, password) VALUES('Alice','Alice@example.com','Alicepassword');
に当たる操作。
sequelize
model.create({
name: 'Alice',
email: 'Alice@example.com',
password: 'Alice-password'
});
bulkCreate()
複数のデータを追加する。
SQL
INSERT INTO table_name
(name, email, password)
VALUES
('Alice', 'Alice@example.com', 'Alice_password'),
('John', 'John@example.com', 'John_password'),
('Mikel', 'Mikel@example.com', 'Mikel_password');
に当たる操作。
sequelize
model.bulkCreate([
{'Alice', 'Alice@example.com', 'Alice_password'},
{'John', 'John@example.com', 'John_password'},
{'Mikel', 'Mikel@example.com', 'Mikel_password'}
]);
UPDATE
sql文のUPDATEに当たる操作
update()
条件に合うデータを更新する。
SQL
UPDATE table_name SET name = 'Alice', email = 'Alice@example.com WHERE id = 1;
に当たる操作。
sequelize
model.update(
{ name: 'Alice', email: 'Alice@example.com' },
{ where: { id: 1 } }
);
save()
SQL
適切なSQLは見いだせませんでした。
SQLを実行するコード内などで処理する必要がありそうです。
sequelize
sequelizeではfindOneなどで取得していた値をsava()によって更新できます。
const users = model.findOne(where: { id: 1 })
users.user_name = 'Alice';
users.email = 'Alice@example.com';
users.save();
DELETE
sql文のDELETEに当たる操作
destroy()
条件に当てはまるデータを削除する
SQL
DELETE FROM table_name WHERE id = 1;
に当たる操作。
sequelize
model.destroy({
where: {
id: 1
}
})
findOneなどですでに取得済みの場合
SQL
適切なSQLは見いだせませんでした。
SQLを実行するコード内などで処理する必要がありそうです。
sequelize
const users = model.findOne(where: { id: 1 })
users.destroy();
終わりに
今回、何気なく使っているsequlizeの操作に該当するSQLを自分なりに考えてみて、 すぐに思いつかないものやスムーズにできないもの等あり、勉強になりました。
ただ便利だからと使うのではなく背景にある操作もしっかり理解し、身に着けていきたいと感じました。
間違い等、ほかに良いSQL等あればコメントいただければ幸いです。
__________________________________
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/