数据库连接池以及sequelize实现增删改查等操作指南
本篇文章给大家分享《数据库连接池以及sequelize实现增删改查等操作指南》,覆盖了数据库的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。
数据库连接池
介绍数据库连接池
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。
通俗的理解就是: 数据库连接池是程序启动时建立足够数量的数据库连接对象,并将这些连接对象组成一个池,由程序动态的对池中的连接对象进行申请、使用和释放。
优点
(1)避免应用程序频繁的连接、断开数据库
(2)提供数据库连接对象的使用频率。
使用方法
(1)创建数据库连接池:
mysql.createPool(config)
host:数据库服务器的地址
port: 端口号
user:连接数据库的用户名
password:连接数据库的密码
database:数据库名
connectionLimit:用于指定连接池中最大的链接数,默认属性值为10.
multipleStatements :是否允许执行多条sql语句,默认值为false
(2)从连接池中获取一个连接
连接池名.getConnection(function(err,connection){
执行的代码
})
//参数err:错误对象。连接失败后的错误信息
//参数connection:连接对象。若连接失败,它就是undefined
(3)释放连接对象(将连接对象放回连接池): connection.release();
(4)从连接池中移除连接对象: connection.destory();
(5)关闭该连接池: 连接池名.end();
数据库访问中的ORM——sequelize模块
ORM
对象关系映射,主要解决面向对象编程与关系型数据库之间不匹配的问题。
ORM的特点
- 可以提高开发的效率
- 不用直接写SQL语句
sequelize模块——ORM的实现模块
基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect)。它当前支持MySQL、MariaDB、SQLite、PostgreSQL、Sql Server 数据库。
sequelize的特色
- 强大的模型定义,支持虚拟类型。
- 支持完善的数据验证,减轻前后端的验证压力。
- Sequelize的查询非常全面和灵活。
sequelize的使用
数据库内容:数据库名称为spj,数据库表为 users表;


1、安装sequelize:npm install sequelize --->必须先安装mysql的驱动模块(npm install mysql);
2、连接数据库:创建sequelize的对象;
//导入mysql模块
const mysql = require('mysql2');
//导入sequelize模块
const Sequelize = require('sequelize');
//创建sequelize对象,参数分别为:数据库名称,数据库类型,密码,配置
var MySequelize = new Sequelize('spj','root','929TJ813',{
host:'localhost',
port:3306,
dialect:'mysql', //数据库类型
pool:{ //数据库连接池
max:20, //最大连接对象的个数
min:5, //最小连接对象的个数
idle:1000 //最长等待时间,单位为毫秒
}
})
module.exports = MySequelize ; //导出创建的sequelize对象
3、创建数据模型:数据模型是一个类,对应的是数据库中一张表;
const Sequelize =require('sequelize')
const MySequesize = require('../config/dbconfig'); //导入创建的sequelize对象
//创建StudentModel模型,该模型对应的表名是student
var StudentModel = MySequesize.define('users',{
sid:{
type:Sequelize.INTEGER, //表示属性的数据类型
field:'s_id', //属性对应的列名,若不定义field则表中的列名(sid)就是属性名
primaryKey:true, //表示主键
autoIncrement:true //表示主键自增
},
sname:{
type:Sequelize.STRING(50),
field: 's_name',
allowNull:false, //表示当前列是否允许为空,false表示该列不能为空
//unique:true //表示该列的值必须唯一
},
sgender:{
type:Sequelize.STRING(4),
field:'s_gender',
allowNull: false
},
sbirthday:{
type:Sequelize.DATE,
field:'s_birthday',
allowNull:false
},
saddress:{
type:Sequelize.STRING(100),
field:'s_address',
allowNull:false
},
sage:{
type:Sequelize.INTEGER,
field:'s_age',
allowNull:false
}
},{
freezeTableName:true, //true表示使用给定的表名,false表示模型名后加s作为表名
timestamps:false //true表示给模型加上时间戳属性(createAt、updateAt),false表示不带时间戳属性
})
//同步数据库,force的值为false,表若存在则先删除后创建,force的值为true表示表若存在则不创建
var users = StudentModel.sync({force:false});
module.exports = StudentModel; //导出模型
4、使用sequelize实现增删改查 。
const StudentModel = require('../../db/model/StudentModel');
const Sequelize = require('sequelize')
//插入数据
StudentModel.create({
sname:'关羽',
sgender:'男',
sbirthday:'1998-12-28',
saddress:'陕西宝鸡'
}).then(result=>{
console.log("插入成功!",result);
}).catch(err=>{
console.log("插入失败!",err);
})
//查询数据
StudentModel.findAll({
raw:true //查询出来只有需要的数据,没有别的内容
}).then(data=>{
console.log(data);
})
//删除记录
StudentModel.destroy({
where:{
sid:2
}
}).then(result=>{
console.log("删除成功!",result)
}).catch(err=>{
console.log("删除失败!",err);
})
//更新记录
StudentModel.findOne({
where:{
sid:3
}
}).then(users=>{
users.update({
sname:'张飞',
sgender:'男'
}).then(result=>{
console.log("更新成功!",result)
}).catch(err=>{
console.log("更新失败!",err);
})
}).catch(error=>{
console.log("查无此人!",error);
})
//查询部分字段
StudentModel.findAll({
attributes:['sname','saddress'],
raw:true
}).then(result=>{
console.log(result);
}).catch(err=>{
console.log(err);
})
//聚合函数
StudentModel.findAll({
attributes:[[Sequelize.fn('COUNT',Sequelize.col('s_id')),"记录总数"]], //col里面必须放的是列名
raw:true
}).then(result=>{
console.log(result)
})
5、使用sequelize实现模糊查询等内容。
const StudentModel = require('../../db/model/StudentModel');
const Op = require('sequelize').Op; //引入sequelize模块的Op操作符
//模糊查询
StudentModel.findAll({
where:{
sname:{
[Op.like]:'张%'
}
},
raw:true
}).then(result=>{
console.log(result);
})
//between:查询年龄在12到18之间的人的信息
StudentModel.findAll({
where:{
sage:{
[Op.between]:[12,18]
}
},
raw:true
}).then(result=>{
console.log(result);
})
//in:查询地址是'陕西西安‘和'陕西商洛‘的记录
StudentModel.findAll({
where:{
saddress:{
[Op.in]:['陕西西安','陕西商洛']
}
},
order:[
['sage','desc'] //查询结果按照sage的降序排列
],
raw:true
}).then(result=>{
console.log(result);
})
//and和or:查询性别为'男‘,并且地址是‘陕西宝鸡'的记录
StudentModel.findAll({
where:{
[Op.and]:[ //把and改为or即为或时间
{
sgender:{
[Op.eq]:'男'
}
},
{
saddress:{
[Op.eq]:'陕西宝鸡'
}
}
]
},
raw:true
}).then(result=>{
console.log(result);
})
//limit和offset:分页查询
StudentModel.findAll({
limit:3, //查询的记录数
offset:1, //从索引值为几的记录开始查询(查询的起始位置),所有数据的索引值从0开始
raw:true
}).then(result=>{
console.log(result);
})
总结
今天关于《数据库连接池以及sequelize实现增删改查等操作指南》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于mysql的内容请关注golang学习网公众号!
MySQL内部函数的超详细介绍
- 上一篇
- MySQL内部函数的超详细介绍
- 下一篇
- MySQL查询性能优化武器之链路追踪
-
- 数据库 · MySQL | 1天前 |
- MySQL数值函数大全及使用技巧
- 117浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- 三种登录MySQL方法详解
- 411浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- MySQL数据备份方法与工具推荐
- 420浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- MySQL数据备份方法与工具推荐
- 264浏览 收藏
-
- 数据库 · MySQL | 4天前 |
- MySQL索引的作用是什么?
- 266浏览 收藏
-
- 数据库 · MySQL | 5天前 |
- MySQL排序原理与实战应用
- 392浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQLwhere条件查询技巧
- 333浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用数据类型有哪些?怎么选更合适?
- 234浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用命令大全管理员必学30条
- 448浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL高效批量插入数据方法大全
- 416浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL性能优化技巧大全
- 225浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL数据备份4种方法保障安全
- 145浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3167次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3380次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3409次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4513次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3789次使用
-
- golang beego框架路由ORM增删改查完整案例
- 2022-12-30 456浏览
-
- 基于sqlalchemy对mysql实现增删改查操作
- 2023-01-08 440浏览
-
- MySQL表的CURD操作(数据的增删改查)
- 2023-02-25 408浏览

