Sequelize 的 CRUD

凡事從 CRUD 開始。

新增資料

Model.create()

1
2
3
const jane = await User.create({ firstName: "Jane", lastName: "Doe" });
// 建立時的 id
console.log("Jane's auto-generated ID:", jane.id);

撈出資料

Model.findAll()

1
2
3
// Find all users
const users = await User.findAll();
console.log("All users:", JSON.stringify(users, null, 2));

也可以指定要哪些欄位:

1
2
3
4
Model.findAll({
attributes: ['foo', 'bar']
});
// SELECT foo, bar FROM ...

或加上 WHERE

1
2
3
4
5
6
7
Post.findAll({
where: {
authorId: 2
authorId: [2, 3]
}
});
// SELECT * FROM post WHERE authorId = 2;

如果要使用「運算子」的話:

1
2
3
4
5
6
7
8
9
10
// 預設就有引入,只是寫出來給你看
const { Op } = require("sequelize");
const users = await User.findAll({
where: {
id: {
[Op.gt]: 2
}
}
});
// SELECT * FROM post WHERE authorId > 2;

其他的運算子(只列我應該會用到的):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const { Op } = require("sequelize");
Post.findAll({
where: {
[Op.and]: [{ a: 5 }, { b: 6 }], // (a = 5) AND (b = 6)
[Op.or]: [{ a: 5 }, { b: 6 }], // (a = 5) OR (b = 6)
someAttribute: {
// Basics
[Op.eq]: 3, // = 3
[Op.ne]: 20, // != 20
[Op.is]: null, // IS NULL
[Op.not]: true, // IS NOT TRUE
[Op.or]: [5, 6], // (someAttribute = 5) OR (someAttribute = 6)

// Number comparisons
[Op.gt]: 6, // > 6
[Op.gte]: 6, // >= 6
[Op.lt]: 10, // < 10
[Op.lte]: 10, // <= 10
[Op.between]: [6, 10], // BETWEEN 6 AND 10
[Op.notBetween]: [11, 15], // NOT BETWEEN 11 AND 15
}
}
});

更新資料

Model.update()

1
2
3
4
5
6
7
8
9
10
11
12
// 把 id >= 2 的都改名
~async function () {
const result = await User.update({ firstName: 'peanu'} ,{
where: {
id: {
[Op.gte]: 2
}
}
});
// 影響了幾欄
console.log("affected row:", result);
}()

刪除資料

Model.destroy()

1
2
3
4
5
6
7
8
9
10
// 把 id >= 2 的都刪掉
~async function () {
const result = await User.destroy({
where: {
id: 5
}
})
// 影響了幾欄
console.log("result:", result);
}()

排序

想要設定 ORDER BY 可以這樣設:

1
2
3
4
5
6
7
8
9
~async function () {
const result = await Comment.findAll({
// 根據 id 降冪排序
order: [
['id', 'DESC']
]
});
console.log(JSON.stringify(result, null, 4));
}()

其他比較方便的寫法

直接根據 id 搜尋(準確來說是 Primary key):

Model.findByPk()

1
2
3
4
5
6
7
8
9
~async function () {
const user = await User.findByPk(1);
// 接著就可以直接對 id=1 的 user 做事情了
const result = await user.update({
lastName: 'hahaha'
})
// 跟 jQuery 很像,這邊還是會回傳 user,讓你可以一直鏈結下去
console.log('result', result);
}()

只想要撈出一筆資料:

Model.findOne()

1
2
3
4
5
6
7
8
9
10
11
12
13
~async function () {
const user = await User.findOne({
where: {
id: 1
}
});
// 接著就可以直接對 id=1 的 user 做事情了
const result = await user.update({
lastName: 'hahaha'
})
// 跟 jQuery 很像,這邊還是會回傳 user,讓你可以一直鏈結下去
console.log('result', result);
}()
Sequelize 建立關聯 使用 Sequelize 的事前準備
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×