Sequelize-数据(增)删改查(单条数据)
关于数据的新增在前面已经介绍过了,所以本文主要介绍的内容为查询,修改,删除不包括新增。
查询数据
根据主键查询
// 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 } }); })();