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进程管理模块forever详解
Jun 01 NodeJs
使用forever管理nodejs应用教程
Jun 03 NodeJs
Nodejs关于gzip/deflate压缩详解
Mar 04 NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 NodeJs
nodejs修复ipa处理过的png图片
Feb 17 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
使用nodejs下载风景壁纸
Feb 05 NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 NodeJs
用Electron写个带界面的nodejs爬虫的实现方法
Jan 29 NodeJs
nodejs使用async模块同步执行的方法
Mar 02 NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 NodeJs
nodejs log4js 使用详解
May 31 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
PHP生成不重复标识符的方法
2014/11/21 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
jQuery 中国省市两级联动选择附图
2014/05/14 Javascript
吐槽一下我所了解的Node.js
2014/10/08 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
webpack的 rquire.context用法实现工程自动化的方法
2020/02/07 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
在Python中使用SQLite的简单教程
2015/04/29 Python
Python装饰器用法实例总结
2018/05/26 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
python使用pymongo与MongoDB基本交互操作示例
2020/04/09 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
2020/08/04 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
adidas官方旗舰店:德国运动用品制造商
2017/11/25 全球购物
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
绿化先进工作者事迹材料
2014/01/30 职场文书
综合实践活动方案
2014/02/14 职场文书
电子银行营销方案
2014/02/22 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
初中学生操行评语
2014/12/26 职场文书
开学典礼校长致辞
2015/07/29 职场文书