Nodejs + sequelize 实现增删改查操作


Posted in NodeJs onNovember 07, 2020

1. 下载资源库

npm install sequelize --save

npm install mysql2 --save // npm install mysql 提示不完整

2. 创建数据库配置文件 db.js,配置数据库

var Sequelize = require('sequelize'); 
module.exports = new Sequelize('blog', 'root', '123456', {
  host: 'localhost', // 数据库地址
  dialect: 'mysql', // 指定连接的数据库类型
  operatorsAliases: false,
  pool: {
    max: 5, // 连接池中最大连接数量
    min: 0, // 连接池中最小连接数量
    idle: 10000 // 如果一个线程 10 秒钟内没有被使用过的话,那么就释放线程
  }
});

3. 创建一个model 文件 user.js

var Sequelize = require('sequelize');
var sequelize = require('./db');

// 创建 model
var User = sequelize.define('user', {
  id : {type : Sequelize.INTEGER, autoIncrement : true, primaryKey : true, unique : true},
  userName: {
    type: Sequelize.STRING, // 指定值的类型
    field: 'user_name' // 指定存储在表中的键名称
  },
  // 没有指定 field,表中键名称则与对象键名相同,为 email
  email: {
    type: Sequelize.STRING
  }
}, {
  // 如果为 true 则表的名称和 model 相同,即 user
  // 为 false MySQL创建的表名称会是复数 users
  // 如果指定的表名称本就是复数形式则不变
  freezeTableName: true
});

/*User.sync({force:false}).then(function(){
  console.log("success to start");
}).catch(function(err){
  console.log("failed to start ")
})*/
// 创建表
// User.sync() 会创建表并且返回一个Promise对象
// 如果 force = true 则会把存在的表(如果users表已存在)先销毁再创建表
// 默认情况下 forse = false
//var user = User.sync({ force: false });

// 添加新用户
exports.addUser = function(userName, email) {
  // 向 user 表中插入数据
  return User.create({
    userName: userName,
    email: email
  }).then(function(result){
    console.log("插入操作成功"+result);
  }).catch(function(err){
    console.log("添加数据发生错误:"+err)
  });
};

exports.findByName = function(userName) {
  return User.findOne({where: {user_name:userName
    }}).then(function(result){
       console.log("成功:" + result.id);
    }).catch(function(err){
      console.log("发生错误:" + err);
    });
};

// 通过用户名查找用户
 
exports.update = function(id){
 return User.findOne({where: {id:id
    }}).then(function(user){
      
      return user.update({
          email:'jack3@qq.com'
        }).then(function(result){
          console.log("update success: "+result);
        }).catch(function(err){
          console.log("更新操作出错:"+err);
        }); 

    });
 
};
exports.destroy = function(id){
  return User.destroy({where:{id:id}}).then(function(result){
    console.log("delete success");
  }).catch(function(err){
    console.log("delete data err: "+err);
  })
}

4. 测试文件

var user = require('./user');
//查询操作
//user.findByName("jack");
// 添加用户
//user.addUser('jack2', 'jack@163.com');
// 更新
//user.update(1001);
//删除
//user.destroy(1001);

补充知识:nodejs Sequelize 简单查询语句和 mysql常用的几个查询命令

我是前端,但总有需求让做后端的活,所以顺带着熟悉了下简单的查询语句

贴出来,如果有需要可以参考下,备注很详细,就不多解释了

废话不多说贴代码:

#去除unionid 重复的搜索结果
#query_resultsign 表名
select *, count(unionid) from query_resultsign where issign='false' group by unionid ;
 
#去除unionid 重复的搜索结果
#query_resultsign 表名
select *, count(unionid) from query_resultsign where issign='true' group by unionid ;
 
#求未签约用户的平均访问频率(即为求搜索结果列的平均值issign='false' 未签约)
#cuid 是unid的别名
#query_resultsign 表名
select AVG(bs.cuid) as unUserAvg FROM (select *, count(unionid) cuid from query_resultsign where issign='false' group by unionid ) as bs;
 
#求平均值
#(即为求搜索结果issign='true' count的平均值)
#bs为子查询的别名,不带别名会报错
#query_resultsign 表名
select AVG(bs.cuid) userAvg FROM (select *, count(unionid) cuid from query_resultsign where issign='true' group by unionid ) as bs;
 
#增加id 列 int 
#query_resultsign
ALTER TABLE query_resultsign add id int;
 
#使表 query_resultsign (上一步)增加的列变为自增列
alter table query_resultsign change id id int NOT NULL AUTO_INCREMENT primary key;
 
 #获取两列数据中有相同数据的列
 #query_resultsign 表名
select  p1.*  from  query_resultsign  p1,query_resultsign  p2  where  p1.id<>p2.id
 and  p1.x  =  p2.x 
 and  p1.y  =  p2.y ;
 
 #查找表query_resultsign unionid 相同的用户
 select  p1.*  from  query_resultsign  p1,query_resultsign  p2  where  p1.id<>p2.id
 and  p1.unionid  =  p2.unionid ;

sequelize 的调用sql语句的方法顺带提一下,网上大多教程都是用model 查询的,每次都要建立model。有点麻烦 。配置的教程请参看配置教程。

sequelize调用sql主要用query(sql,{})方法:

var Sequelize = require('sequelize');//引入sequelize 
var sequelize = require('./../../database/dataconfig'); //引入连接配置文件
 
//查找签约用户
exports.selectHeatData = function (req, res) {
  return sequelize.query("select * from `query_resultSign` where issign ='true'", { type: sequelize.QueryTypes.SELECT }).then(data => {
    // console.log('******', data);
    res.send(data);
  }).catch(err => {
    console.log('错误', err)
  })
}
//其他方法就是换了下sql语句

主要知识点就是query方法内传入查询出的结果的类型 { type: sequelize.QueryTypes.SELECT } 这样就不用手动转换成json对象了。

附带配置文件代码

dataconfig.js

var Sequelize = require('sequelize'); 
module.exports = new Sequelize('pingan_scame', 'root', '123456', {
  host: 'localhost', // 数据库地址
  dialect: 'mysql', // 指定连接的数据库类型
  operatorsAliases: false,
  pool: {
    max: 5, // 连接池中最大连接数量
    min: 0, // 连接池中最小连接数量
    idle: 10000 // 如果一个线程 10 秒钟内没有被使用过的话,那么就释放线程
  }
 
});

以上这篇Nodejs + sequelize 实现增删改查操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
基于NodeJS的前后端分离的思考与实践(二)模版探索
Sep 26 NodeJs
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
Sep 26 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
nodejs爬虫抓取数据乱码问题总结
Jul 03 NodeJs
nodejs爬虫抓取数据之编码问题
Jul 03 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
详解NodeJS框架express的路径映射(路由)功能及控制
Mar 24 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
详解nodejs异步I/O和事件循环
Jun 07 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
NodeJS使用Range请求实现下载功能的方法示例
Oct 12 NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 NodeJs
nodejs+koa2 实现模仿springMVC框架
Oct 21 #NodeJs
nodejs使用Sequelize框架操作数据库的实现
Oct 21 #NodeJs
用Nodejs实现在终端中炒股的实现
Oct 18 #NodeJs
Nodejs在局域网配置https访问的实现方法
Oct 17 #NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 #NodeJs
浅谈vue websocket nodeJS 进行实时通信踩到的坑
Sep 22 #NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 20 #NodeJs
You might like
可以支持多中格式的JS键盘
2007/05/02 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
jquery中用函数来设置css样式
2016/12/22 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python之list对应元素求和的方法
2018/06/28 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
python3实现飞机大战
2020/11/29 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
GLAMGLOW格莱魅美国官网:美国知名的面膜品牌
2016/12/31 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
高级护理专业大学生求职信
2013/10/24 职场文书
校长就职演讲稿
2014/01/06 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
学校标语大全
2014/06/19 职场文书
学校端午节活动总结
2015/02/11 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers