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 就是对应的筛选条件值
// 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()
进行删除。
// 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
}
});
})();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具