Sequelize-数据(增)删改查(单条数据)

作者: adm 分类: node 发布时间: 2023-02-17

关于数据的新增在前面已经介绍过了,所以本文主要介绍的内容为查询,修改,删除不包括新增。

查询数据

根据主键查询

// 1.导入Sequelize
const Sequelize = require('sequelize');

(async () => {
    // 2.配置连接信息
    const sequelize = new Sequelize('demo', 'root', 'yangbuyiya', {
        // MySQL服务器地址
        host: 'www.yangbuyi.top',
        // MySQL服务器端口号
        port: 3310,
        // 注意点: Sequelize不仅仅能操作MySQL还能够操作其它类型的数据库
        // 告诉Sequelize当前要操作的数据库类型
        dialect: 'mysql',
        // 连接池
        pool: {
            // 最多有多少个连接
            max: 5,
            // 最少有多少个连接
            min: 0,
            // 当前连接多久没有操作就断开
            idle: 10000,
            // 多久没有获取到连接就断开
            acquire: 30000,
        }
    });

    // 3.创建模型
    const User = sequelize.define('user', {
        id: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        name: {
            // varchar(255)
            type: Sequelize.STRING,
            allowNull: false,
            unique: true
        },
        age: {
            type: Sequelize.TINYINT,
            defaultValue: 66
        },
        gender: {
            type: Sequelize.ENUM(['男', '女', '妖']),
            defaultValue: '妖'
        }
    }, {
        // 告诉 sequelize 不需要自动将表名变成复数
        freezeTableName: true,

        // 自定义表名
        // tableName: 'student',
        // 不需要自动创建 createAt / updateAt 这两个字段
        timestamps: false,

        // 指定索引
        indexes: [
            {
                // 索引名称
                name: 'idx_age',
                // 索引字段名称
                fields: ['age'],
            }
        ]
    });

    // 查询数据
    let user = await User.findByPk(3);
    console.log(user);
})();

关于查询这里就只演示一个,其它的自行测试即可。

修改数据
第一种方式就是先查询出来所对应的数据之后再调用一次 save(); 即可修改:

// 1.导入Sequelize
const Sequelize = require('sequelize');

(async () => {
    // 2.配置连接信息
    const sequelize = new Sequelize('demo', 'root', 'yangbuyiya', {
        // MySQL服务器地址
        host: 'www.yangbuyi.top',
        // MySQL服务器端口号
        port: 3310,
        // 注意点: Sequelize不仅仅能操作MySQL还能够操作其它类型的数据库
        // 告诉Sequelize当前要操作的数据库类型
        dialect: 'mysql',
        // 连接池
        pool: {
            // 最多有多少个连接
            max: 5,
            // 最少有多少个连接
            min: 0,
            // 当前连接多久没有操作就断开
            idle: 10000,
            // 多久没有获取到连接就断开
            acquire: 30000,
        }
    });

    // 3.创建模型
    const User = sequelize.define('user', {
        id: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        name: {
            // varchar(255)
            type: Sequelize.STRING,
            allowNull: false,
            unique: true
        },
        age: {
            type: Sequelize.TINYINT,
            defaultValue: 66
        },
        gender: {
            type: Sequelize.ENUM(['男', '女', '妖']),
            defaultValue: '妖'
        }
    }, {
        // 告诉 sequelize 不需要自动将表名变成复数
        freezeTableName: true,

        // 自定义表名
        // tableName: 'student',
        // 不需要自动创建 createAt / updateAt 这两个字段
        timestamps: false,

        // 指定索引
        indexes: [
            {
                // 索引名称
                name: 'idx_age',
                // 索引字段名称
                fields: ['age'],
            }
        ]
    });

    // 查询数据
    let user = await User.findByPk(3);
    user.name = 'BNTangTest3';

    // 修改数据
    await user.save();
})();

第二种方式就是直接用模型的 update 方法进行修改:

第一个参数:是一个对象,key 就是需要修改的属性,value 就是所对应的更改值
第二个参数:也是一个对象,key 就是 MySQL 当中的筛选条件关键字,value 又是一个对象,该对象当中的 k 是数据库当中的列名,value 就是对应的筛选条件值
image-20220117225024306

// 1.导入Sequelize
const Sequelize = require('sequelize');

(async () => {
    // 2.配置连接信息
    const sequelize = new Sequelize('demo', 'root', 'yangbuyiya', {
        // MySQL服务器地址
        host: 'www.yangbuyi.top',
        // MySQL服务器端口号
        port: 3310,
        // 注意点: Sequelize不仅仅能操作MySQL还能够操作其它类型的数据库
        // 告诉Sequelize当前要操作的数据库类型
        dialect: 'mysql',
        // 连接池
        pool: {
            // 最多有多少个连接
            max: 5,
            // 最少有多少个连接
            min: 0,
            // 当前连接多久没有操作就断开
            idle: 10000,
            // 多久没有获取到连接就断开
            acquire: 30000,
        }
    });

    // 3.创建模型
    const User = sequelize.define('user', {
        id: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        name: {
            // varchar(255)
            type: Sequelize.STRING,
            allowNull: false,
            unique: true
        },
        age: {
            type: Sequelize.TINYINT,
            defaultValue: 66
        },
        gender: {
            type: Sequelize.ENUM(['男', '女', '妖']),
            defaultValue: '妖'
        }
    }, {
        // 告诉 sequelize 不需要自动将表名变成复数
        freezeTableName: true,

        // 自定义表名
        // tableName: 'student',
        // 不需要自动创建 createAt / updateAt 这两个字段
        timestamps: false,

        // 指定索引
        indexes: [
            {
                // 索引名称
                name: 'idx_age',
                // 索引字段名称
                fields: ['age'],
            }
        ]
    });

    // 修改数据
    await User.update({
        name: 'BNTangsss'
    }, {
        where: {
            id: 3
        }
    });
})();

删除数据
删除数据的方式也有两种第一种就是先查询出来需要删除的数据,然后调用对象的 destroy() 进行删除。

image-20220117225617715

// 1.导入Sequelize
const Sequelize = require('sequelize');

(async () => {
    // 2.配置连接信息
    const sequelize = new Sequelize('demo', 'root', 'yangbuyiya', {
        // MySQL服务器地址
        host: 'www.yangbuyi.top',
        // MySQL服务器端口号
        port: 3310,
        // 注意点: Sequelize不仅仅能操作MySQL还能够操作其它类型的数据库
        // 告诉Sequelize当前要操作的数据库类型
        dialect: 'mysql',
        // 连接池
        pool: {
            // 最多有多少个连接
            max: 5,
            // 最少有多少个连接
            min: 0,
            // 当前连接多久没有操作就断开
            idle: 10000,
            // 多久没有获取到连接就断开
            acquire: 30000,
        }
    });

    // 3.创建模型
    const User = sequelize.define('user', {
        id: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        name: {
            // varchar(255)
            type: Sequelize.STRING,
            allowNull: false,
            unique: true
        },
        age: {
            type: Sequelize.TINYINT,
            defaultValue: 66
        },
        gender: {
            type: Sequelize.ENUM(['男', '女', '妖']),
            defaultValue: '妖'
        }
    }, {
        // 告诉 sequelize 不需要自动将表名变成复数
        freezeTableName: true,

        // 自定义表名
        // tableName: 'student',
        // 不需要自动创建 createAt / updateAt 这两个字段
        timestamps: false,

        // 指定索引
        indexes: [
            {
                // 索引名称
                name: 'idx_age',
                // 索引字段名称
                fields: ['age'],
            }
        ]
    });

    let user = await User.findByPk(3);

    // 删除数据
    await user.destroy();
})();

在查询官方文档的时候发现 destroy 其实是可以传入一个对象的,该对象就是用来指定删除的 where 条件使用的,并且还需要通过模型来进行调用 destroy 方法,栗子如下:

// 1.导入Sequelize
const Sequelize = require('sequelize');

(async () => {
    // 2.配置连接信息
    const sequelize = new Sequelize('demo', 'root', 'yangbuyiya', {
        // MySQL服务器地址
        host: 'www.yangbuyi.top',
        // MySQL服务器端口号
        port: 3310,
        // 注意点: Sequelize不仅仅能操作MySQL还能够操作其它类型的数据库
        // 告诉Sequelize当前要操作的数据库类型
        dialect: 'mysql',
        // 连接池
        pool: {
            // 最多有多少个连接
            max: 5,
            // 最少有多少个连接
            min: 0,
            // 当前连接多久没有操作就断开
            idle: 10000,
            // 多久没有获取到连接就断开
            acquire: 30000,
        }
    });

    // 3.创建模型
    const User = sequelize.define('user', {
        id: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        name: {
            // varchar(255)
            type: Sequelize.STRING,
            allowNull: false,
            unique: true
        },
        age: {
            type: Sequelize.TINYINT,
            defaultValue: 66
        },
        gender: {
            type: Sequelize.ENUM(['男', '女', '妖']),
            defaultValue: '妖'
        }
    }, {
        // 告诉 sequelize 不需要自动将表名变成复数
        freezeTableName: true,

        // 自定义表名
        // tableName: 'student',
        // 不需要自动创建 createAt / updateAt 这两个字段
        timestamps: false,

        // 指定索引
        indexes: [
            {
                // 索引名称
                name: 'idx_age',
                // 索引字段名称
                fields: ['age'],
            }
        ]
    });

    // 删除数据
    await User.destroy({
        where: {
            id: 6
        }
    });
})();

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!