天天看点

Sequelize 增删改查

// ··· 这里Sequelize引入及数据库连接就不写了
let a = null
class User extends Model{}
if(!a) { // 这里是为了方便,简单判断下是否创建了数据表,实际开发中不会这么写的!
    User.init({
        firstName: DataTypes.STRING,
        lastName: DataTypes.STRING
    }, {sequelize, modelName: 'Users'})
    User.sync({alter: true})
    a = true
}
           

Sequelize 增删改查

简单的INSERT 查询:

看上边的例子。我们已经创建了一个users数据表,数据插入users表有2种方式:

(1) 方式一:

const user = User.build({ firstName: '吕', lastName: '星辰' })

user.save()  // xxx.save() 方法是异步的,返回一个promise,如果你需要等保存完之后执行一些操作,可以加上then或 await来确保安全!

(2)方式二:(常用)

Sequelize提供了 

create

 方法,该方法将上述的 

build

 方法和 

save

 方法合并为一个方法:

await User.create({ firstName: '吕', lastName: '小辰' })

 执行之后,数据将会被插入到数据表:

Sequelize 增删改查

补充:

(1)以上2种方式保存之后,成功的回调参数是插入的数据:

// userID是主键,之所以是null因为主键是数据库层面帮我们自动生成的,这个返回的结果是
// 插入数据库之前 我们写的和sequelize帮我们生成的数据。
let use = User.create({
    account: '321', password: '123', age: '21', test: '测试2'
}).then(res => {
    console.log("返回结果:", res.toJSON())
})
/**
 * 返回结果: {
  createTime: 2021-04-16T05:07:49.634Z,
  editTime: 2021-04-16T05:07:49.635Z,
  uuid: 'bbf95af0-7e79-45b4-ab92-68d6f78f17d8',
  userID: null,
  account: '321',
  password: '123',
  age: '21',
  test: '测试2'
}
 * 
 */ 
           

(2)上边输出之所以用toJSON() 方法,如果不做任何处理,此结果带有一些sequelize生成的额外的数据,下边是没做任何处理的结果:

Sequelize 增删改查

简单的SELECT查询:

1、可以使用 

findAll

 方法从数据库中读取整个表:

User.findAll().then(users => {
    console.log(users.every(user => user instanceof User)); // true
    console.log('all users', JSON.stringify(users, null, 2))
})
           
Sequelize 增删改查

SELECT查询特定属性:

1、特定属性查询

选择只查询某些特定属性的话,可以使用 attributes 参数:

User.findAll({
    attributes: ['id']
}).then(users => {
    console.log('all users id', JSON.stringify(users))
})
           
Sequelize 增删改查

补充:

JSON.stringfy(value, [replacer], [space]) 将一个对象或值转化为JSON字符串

参数一:JSON字符串值;参数二:一个函数,如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;如果该参数为 null 或者未提供,则对象所有的属性都会被序列化;参数三:指定缩进用的空白字符串,用于美化输出(pretty-print);如果参数是个数字,它代表有多少的空格;上限为10。

如:

console.log(JSON.stringfy(r, null, 2))
           
Sequelize 增删改查

2、重命名查询出来的属性

可以使用嵌套数组来重命名属性:

User.findAll({
    attributes: [['lastName', 'aliasLastName'], 'age']
}).then(users => {
    console.log('all users id', JSON.stringify(users))
})
           
Sequelize 增删改查

3、总条数的查询

使用sequelize.fn 聚合函数,进行查询,使用聚合函数时,必须为它提供一个别名,以便能够从模型中访问它。

sequelize是链接数据库时返回的实例,也就是new Sequelize实例。

User.findAll({
    attributes: [
        'lastName',
        [sequelize.fn('COUNT', sequelize.col('id')), 'allCount']
    ]
}).then(users => {
    console.log('all users id', JSON.stringify(users))
})
           
Sequelize 增删改查

4、排除某些属性 exclude: ['xxx']

User.findAll({
    attributes: {
        exclude: ['age', 'updatedAt', 'createdAt']
    }
}).then(users => {
    console.log('查询结果:', JSON.stringify(users))
})
           
Sequelize 增删改查

WHERE 自句过滤查询:

where参数用于过滤查询

User.findAll({
    where: {
        id: 1,age: 21 // 查询id为1且age为21的数据
    }
}).then(users => {
    console.log('查询结果:', JSON.stringify(users))
})
           

具体复杂查询见文档:Sequelize文档

简单 UPDATE 查询 :

Update查询也接收where参数,就像上边的读取查询一样:

把id为1的数据中的age改为 50

User.update({age: 50}, {
    where: {
        id: 1
    }
}).then(users => {
    console.log('查询结果:', JSON.stringify(users))
})
           

批量创建:

Sequelize 提供了Model.bulkCreate方法,仅一次查询,可一次创建多条记录。

Model.bulkCreate 与 Model.create 非常相似,但是它接收的是一个数组对象:

User.bulkCreate([
    {firstName: 'lxc'},
    {firstName: 'xc'},
]).then(users => {
    console.log('查询结果:', JSON.stringify(users))
})
           
Sequelize 增删改查

注意:

使用Model.bulkCreate 创建表中没有的字段,会创建多条空记录:

User.bulkCreate([
    {first: 'lxc'},
    {first: 'xc'}
])
           
Sequelize 增删改查

待续未完成。

继续阅读