使用Sequelize模块操作数据库之增删改查

前面我们已经了解了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

猜你喜欢

转载自blog.csdn.net/txl910514/article/details/131511643