这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战
UPDATE 查询
Update 接受 where
子句参数,就像上面的读取查询一样.
// 修改姓名更改为 "李华"
await User.update({ name: "李华" }, {
where: {
name: 李小龙
}
});
DELETE 查询
Delete 接受 where
子句参数,就像上面的读取查询一样.
// 删除所有名为 "Jane" 的人
await User.destroy({
where: {
name: "李华"
}
});
要销毁所有内容,可以使用 TRUNCATE
// 截断表格
await User.destroy({
truncate: true
});
批量创建
Model.bulkCreate
方法, 一次查询创建多个记录.
以数组对象作为数据源头,Model.bulkCreate
的用法与 Model.create
相似
const userList = await Captain.bulkCreate([
{ name: '张三' },
{ name: '李四' }
]);
console.log(userList.length); // 2
console.log(userList[0].name); // '张三'
但是,默认情况下,bulkCreate
不会在要创建的每个对象上运行验证(而 create
可以做到).
想让 bulkCreate
也运行验证,必须设置validate: true
参数. 但这会降低性能.
const User = sequelize.define('user', {
bar: {
type: DataTypes.TEXT,
validate: {
len: [4, 6]
}
}
});
// 这不会引发错误,两个实例都将被创建
await FUseroo.bulkCreate([
{ name: '张三' },
{ name: '名字太过长测试' }
]);
// 这将引发错误,不会创建任何内容
await User.bulkCreate([
{ name: '张三' },
{ name: '名字太过长测试' }
], { validate: true });
直接从用户获取值,限制实际插入的列可能会有所帮助. 为了做到这一点,bulkCreate()
接受一个 fields
参数,该参数须为你要定义字段的数组(其余字段将被忽略).
await User.bulkCreate([
{ username: '张三' },
{ username: '李四', age: 60 }
], { fields: ['username'] });
实用方法
count
方法仅计算数据库中元素出现的次数.
console.log(`这有 ${await Project.count()} 个项目`);
const amount = await Project.count({
where: {
id: {
[Op.gt]: 25
}
}
});
console.log(`这有 ${amount} 个项目 id 大于 25`);
max
, min
和 sum
的便捷方法
await User.max('age'); // 40
await User.max('age', { where: { age: { [Op.lt]: 20 } } }); // 10
await User.min('age'); // 5
await User.min('age', { where: { age: { [Op.gt]: 5 } } }); // 10
await User.sum('age'); // 55
await User.sum('age', { where: { age: { [Op.gt]: 5 } } }); // 50