前面我们已经了解了Sequelize中模型的创建,现在我们去了解一下通过 Sequelize 对数据库进行增删改查操作,在操作数据库时,增删改操作比较简单,我们会侧重去讲解查询数据库。
简单 INSERT 语句
添加语句是通过Model.create()实现的,参数是一个对象,对象的属性就是表的字段,属性值就是需要添加的数据。见下列实例:
const admin = sequelize.define('admin', {
username: {
type: DataTypes.STRING,
allowNull: false
},
userpass: {
type: DataTypes.STRING,
allowNull: false
}
});
const ins = await admin.create({
username: "张三",
userpass: "123456",
});
在执行完成之后,会返回一个对象,对象中的属性就是表的字段。
可以通过 bulkCreate 一次添加多条数据,bulkCreate 中的参数是一个数组,数据中包含了需要添加的数据对象。具体实例:
const ins = await admin.bulkCreate([{
username: "张三",
userpass: "123456",
},{
username: "王五",
userpass: "549745",
}]);
在默认情况下,使用 bulkCreate 不会对插入的数据进行验证我们可以在创建模型时,给模型添加 validate: true让 bulkCreate 也进行验证(验证具体内容见下篇)。
简单 UPDATE 语句
修改语句是通过Model.update()实现的,参数是一个对象。见下列实例:
//模型创建见上
await admin.update({ username: "李四" }, {
where: {
username: "张三"
}
});
通过第二个参数传递修改条件,第二个参数必须存在否则修改不成功。可以通过给 lastName 赋值为 null 和 不给 where 添加属性两种方法来修改全部数据。
await admin.update({ username: "李四" }, {
where: {
username: null
}
//或者
//where: {
//}
});
简单 DELETE 语句
修改语句是通过Model.destroy()实现的,参数是一个对象。见下列实例:
await admin.destroy({
where: {
username: "张三"
}
});
如果要删除表的所有数据,可以使用 truncate
await admin.destroy({
truncate: true
});
SELECT 语句
简单查询
findAll()方法用于查询数据库
admin.findAll();
//翻译为SQL语句:SELECT * FROM admin
查询特定字段
选择某些特定字段,可以使用 attributes 参数:
//admin模型的创建见上述内容
admin.findAll({
attributes: ['username']
});
//翻译为SQL语句:SELECT username FROM admin
字段重命名
//admin模型的创建见上述内容
admin.findAll({
attributes: [['username','name']]
});
//翻译为SQL语句:SELECT username AS name FROM admin
聚合函数
使用 sequelize.fn 可以执行聚合函数:
//admin模型的创建见上述内容
admin.findAll({
attributes: [
['username','name'],
[sequelize.fn('COUNT', sequelize.col('username')), 'n_hats']
]
});
//翻译为SQL语句:SELECT username AS name,COUNT(username ) AS n_hats FROM admin
所有字段和排除字段
可以通过 include 属性添加所有字段,后面的属性值表示额外要添加的聚合寒,没有则为空数组。
//admin模型的创建见上述内容
admin.findAll(attributes: {
include: []
}
});
可以通过exclude属性排除部分字段,后面的属性值为需要排除的字段。
//admin模型的创建见上述内容
admin.findAll(attributes: {
exclude: ['username']
}
});
使用 where 子句
Sequelize提供了很多操作符,以供我们完成复杂了 where 子句。
操作符对象
const { Op } = require("sequelize");
1
下列为部分操作符列表,我们只列举操作符,具体的使用就不在列举。
[Op.and]: [{ a: 5 }, { b: 6 }], // (a = 5) AND (b = 6)
[Op.or]: [{ a: 5 }, { b: 6 }], // (a = 5) OR (b = 6)
[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)
// 数字比较
[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
// 其它操作符
[Op.all]: sequelize.literal('SELECT 1'), // > ALL (SELECT 1)
[Op.in]: [1, 2], // IN [1, 2]
[Op.notIn]: [1, 2], // NOT IN [1, 2]
[Op.like]: '%hat', // LIKE '%hat'
[Op.notLike]: '%hat', // NOT LIKE '%hat'
[Op.startsWith]: 'hat', // LIKE 'hat%'
[Op.endsWith]: 'hat', // LIKE '%hat'
[Op.substring]: 'hat', // LIKE '%hat%'
使用 where 子句
在使用 where 子句的时候,所以内容必须放在一个对象中,这个属于 findAll方法的第二个参数,第一次参数用于操作查询的字段。这个对象中有一个名为 where 的属性,这个属性就用于存放查询条件,具体使用方法见:
admin.findAll({
where: {
username: "张三"
}
});
// SELECT * FROM admin WHERE username = '张三'
排序和分组
在上面我们了解了如何使用 where 子句是放在 findAll的第二个对象中,这个对象中不止 where 属性,还有 order 属性 和 group 属性
排序
order 选项用于查询结果的排序数据。排序时应该传入一个包含属性-排序方向的元组/数组,以保证正确的转义:
admin.findAll({
order:[['username','DESC'],['userpass','ASC']]
});
分组
group 选项用于查询结果的分组,分组时需要传入分组条件,具体使用见实例:
admin.findAll({ username: 'name' });
1
限制和分页
使用 limit 和 offset 参数可以进行 限制/分页:
// 提取10个实例/行
Project.findAll({ limit: 10 });
// 跳过8个实例/行
Project.findAll({ offset: 8 });
// 跳过5个实例,然后获取5个实例
Project.findAll({ offset: 5, limit: 5 });
原文链接:https://blog.csdn.net/qq_45040919/article/details/110318085