这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战
一. 简单建立模型实例
Sequelize提供了increment
和 decrement
实例方法
const { Sequelize, Model, DataTypes } = require("sequelize");
const sequelize = new Sequelize("sqlite::memory:");
const User = sequelize.define("user", {
name: DataTypes.TEXT,
favoriteColor: {
type: DataTypes.TEXT,
defaultValue: 'green'
},
age: DataTypes.INTEGER,
cash: DataTypes.INTEGER
});
(async () => {
// 强制更新模型表字段
await sequelize.sync({ force: true });
})();
复制代码
二. 数值的递增和递减整实现
const jane = await User.create({ name: "李华", age: 100 });
const incrementResult = await jane.increment('age', { by: 2 });
// 注意: 如只增加 1, 你可以省略 'by' 参数, 只需执行 `user.increment('age')`
// 在 PostgreSQL 中, 除非设置了 `{returning:false}` 参数(不然它将是 undefined),
// 否则 `incrementResult` 将是更新后的 user.
// 在其它数据库方言中, `incrementResult` 将会是 undefined. 如果你需要更新的实例, 你需要调用 `user.reload()`.
复制代码
- 多个字段递增
const jane = await User.create({ name: "Jane", age: 100, cash: 5000 });
await jane.increment({
'age': 2,
'cash': 100
});
// 如果值增加相同的数量,则也可以使用以下其他语法:
await jane.increment(['age', 'cash'], { by: 2 });
复制代码
三. 模型增删改查(CRUD)
创建(create)
1. Model.create()
方法是使用 Model.build()
构建未保存实例并使用instance.save()
保存实例的简写形式.
// 创建一个新用户
const user = await User.create({ firstName: "李华", lastName: "李小龙" });
复制代码
2. fields
参数只影响到该范围内的字段
const user = await User.create({
username: '李华',
is_auth: true
}, { fields: ['username'] });
// 假设 isAdmin 的默认值为 false
console.log(user.username); // '李华'
console.log(user.is_auth); // false
复制代码
查询(select)
// 查询所有用户
const users = await User.findAll(); // 相当于 SELECT * FROM users
复制代码
1. 查询特定属性
User.findAll({
attributes: ['username', 'age']
});
复制代码
2. 嵌套数组重命名字段
User.findAll({
attributes: ['age', ['username', 'name']]
});
复制代码
3. 聚合查询的sequelize.fn
- 使用聚合函数时,必须为它提供一个别名,以便能够从模型中访问它
Model.findAll({
attributes: [
'id', 'display', 'margin', 'width', 'height', 'padding', // 我们必须列出所有属性...
[sequelize.fn('COUNT', sequelize.col('margin')), 'n_margin'] // 添加聚合...
]
});
// 这个设计更简单
Model.findAll({
attributes: {
include: [
[sequelize.fn('COUNT', sequelize.col('margin')), 'n_margin']
]
}
});
复制代码
- 查询
exclude
排除某些属性更方便
Model.findAll({
attributes: { exclude: ['width'] }
});
复制代码