本文概要

讲述了"如何回家取酱油瓶"跟连接数据库的关联.

2.使用sequelize.js (一个传说中的ORM技术:Object-Relational Mapping,能把关系数据库的表结构映射到对象上。) 对数据库进行简单的增删减查.

如果你需要出去打酱油,但是忘记带酱油瓶,想回家去取.

1-如何回家.jpg

那么粗略地描述一下流程就是 ,

1.买车票\机票\自驾\走路 ----->回到家门口 ( 找到目的地 )

2.掏出钥匙\叫家里人----->开门 (通过身份验证)

3.拿到酱油瓶 (取到数据)

2-连接数据库.jpg

那么如何使用node.js来连接?

首先当然要导入相应的mysql提供的数据库驱动包,然后按照连接所需要的参数进行连接.

3-js连接数据库.jpg

那么这些参数有哪些呢?

host:主机地址 (默认:localhost)

user:用户名

password:密码

port:端口号 (默认:3306)

database:数据库名

charset:连接字符集(默认:'UTF8_GENERAL_CI',注意字符集的字母都要大写)

localAddress:此IP用于TCP连接(可选)

socketPath:连接到unix域路径,当使用 host 和 port 时会被忽略

timezone:时区(默认:'local')

connectTimeout:连接超时(默认:不限制;单位:毫秒)

stringifyObjects:是否序列化对象(默认:'false' ;与安全相关https://github.com/felixge/node-mysql/issues/501)

typeCast:是否将列值转化为本地JavaScript类型值 (默认:true)

queryFormat:自定义query语句格式化方法 https://github.com/felixge/node-mysql#custom-format

supportBigNumbers:数据库支持bigint或decimal类型列时,需要设此option为true (默认:false)

bigNumberStrings:supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false)

dateStrings:强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScript Date类型(默认:false)

debug:开启调试(默认:false)

multipleStatements:是否许一个query中有多个MySQL语句 (默认:false)

flags:用于修改连接标志,更多详情:https://github.com/felixge/node-mysql#connection-flags

ssl:使用ssl参数(与crypto.createCredenitals参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑Amazon RDS的配置文件

是不是又长又多??

淡定点,大多数情况下,我们只要设置几个基础的值就能够进行连接了

// 'use strict';

var mysql = require('mysql');

var connection=mysql.createConnection({

//Options

host:'localhost',

user:'root',

password:'root',

database:'testapp'

});

connection.connect();

或者把设置的参数抽出来会更直观一点:

var mysql = require('mysql');

var db_config={

//Options

host:'localhost',

user:'root',

password:'root',

database:'testapp'

};

var connection=mysql.createConnection(db_config);

利用connection.connect()的回调函数添加重连功能:

function handleDisconnect(){

connection.connect(function (err) {

// callback(err,result);

if(err){

console.log(err);

console.log("try to connect");

setTimeout(handleDisconnect,1000); //经过1秒后尝试重新连接

return;

}

console.log("Success");

});

}

handleDisconnect();

查询语句:

var userAddSql= "INSERT INTO user(id,name,sex,age) VALUES(?,?,?,?)";

var userAddSql_Params=['413','just','man','9'];

var showuser="SELECT * FROM user";

var deleteuserSql="DELETE FROM user WHERE name='hehe'"

//调用查询方法

connection.query(userAddSql,userAddSql_Params,function(err,result){

if(err) throw err;

console.log('show result:',result);

console.log('show result:',result.affectedRows);

});

Tips: 为了防止SQL注入,经由用户传来的数值,一定要经过检验,并且慎重使用拼接此数值进行构造的查询语句.

结束连接:

connection.end();

//另一个结束方法

//比较暴力,没有回调函数,立刻执行

//connection.destory();

但是每次都要经过长长的一串SQL语句来控制,真的是心塞啊

接下来祭出神器 EX咖喱棒 Sequelize.js

它是什么 , 我们暂时先不管 , 它能干嘛才是我们最先关注的.

show time.

前提:

我们的数据库在这里使用老牌的MySQL,

为了方便,我先使用MySQL 的Workbench先建立这样的一个数据库:

image.png

回到代码,用sequelize建立对数据库的连接:

①返璞归真:

事无巨细,按部就班

const Sequelize = require('sequelize');

const config = {

database: 'webdb',

username: 'root',

password: 'root',

host: 'localhost',

port: 3306

};

var sequelize = new Sequelize(config.database, config.username, config.password, {

host: config.host,

dialect: 'mysql',

pool: {

max: 5,

min: 0,

idle: 30000

},

timestamps: false

//最好关掉timestamps , 框架自动帮你添加时间到UpdatedAt上边

});

②一刀制敌:

简单粗暴直接,很爽.

用uri的方式进行连接 :new Sequelize(uri, [options={}])

// 使用Uri连接

var sequelize = new Sequelize('mysql://root:root@localhost:3306/webdb');

验证连接

sequelize

.authenticate()

.then(() => {

console.log('Connection has been established successfully.');

})

.catch(err => {

console.error('Unable to connect to the database:', err);

});

在进行增删减查之前

你需要进行sequelize.define() - 模型定义

先来看看这个例子:

image.png

是不是跟之前定义的Table:Pets一样?

有没有注意到 , 代码中定义的是pet , 表名 是 pets .

这里没有写错,这是因为 sequelize 默认会给你定义的model后边添加上s;

如果你觉得这样很腻歪,就不能直接点?

答案是可以的,只要给添上 freezeTableName:true即可:

image.png

接下来,就是正主了

增加一只狗

var now = Date.now();

makedog = async() => {

var dog = await Pet.create({

id: now,

name: 'async大法好',

gender: false,

birth: '2001-01-01',

createdAt: now,

updatedAt: now,

version: 0

});

console.log('created:' + JSON.stringify(dog));

};

makedog();

删掉version:0的狗

deletedog = async() => {

var deldog = await Pet.findAll({

where: {

version: 0

}

});

for (let o of deldog) {

await o.destroy();

}

}

deletedog();

修改version:0的狗

editdog = async() => {

var needEditdogs = await Pet.findAll({

where: {

version: 0

}

});

for (let needEditdog of needEditdogs) {

needEditdog.gender = true;

needEditdog.updatedAt = Date.now();

needEditdog.version++;

await needEditdog.save();

}

}

editdog();

找Id以15两位数字开头的狗:

//为了使用复杂一些的查询,如模糊查询等,需要引入Operator

const Op = Sequelize.Op;

finddogbyid = async(id) => {

var targetdogs = await Pet.findAll({

where: {

id: {

[Op.like]: id + '%'

}

}

});

for (let o of targetdogs) {

console.log('Target:' + JSON.stringify(o));

}

return targetdogs;

}

finddogbyid(15);

如果你觉得用不惯,或者觉得这种Operator太麻烦,也可以使用 sequelize.query(sql, [options={}]) -> Promise

来执行原始的SQL语句进行查询.

默认情况下,返回值中有两个参数:一个包含结果的数组,一个元数据对象。

可以通过.spread方法来查看结果。

关于async和await

谈到这里还应该说到callback ,callback hell , Promise , async/await , ,不过有点偏离主题,先挖个坑吧,看看什么时候填.

nodejs mysql 耗硬盘_nodejs操作MySQL其实很简单相关推荐

  1. nodejs操作mysql创建库和表_Nodejs操作MySQL数据库

    如何用nodejs操作MySql数据呢,其实写法还是简单的, 1.开始在你的node项目中 npm install mysql --save 2.在你的新建项目中 引入代码 //引入数据库 var m ...

  2. nodejs mysql 增删改查_nodejs操作mysql实现增删改查的实例

    首先需要安装mysql模块:npm install mysql --save 然后创建user数据表: 接着使用nodejs对数据库进行增删改查: .[活动]2017 CSDN博客专栏评选 [评论送书 ...

  3. nodejs连接mysql哪个版本_nodejs连接mysql

    node连接mysql比较简单,有两种方式,一种是直接连接,一种是通过连接池连接. 1.使用nodejs直接连接mysql,代码比较少,但是意思很明显 其中host是数据库地址,user是用户名,pa ...

  4. node mysql 增删改查_Nodejs操作MySQL - 增删改查

    先安装npm模块项目 npm init 安装mysql npm install mysql --save Nodejs 连接msyql // 导入mysql const mysql = require ...

  5. python往mysql存入数据_Python操作mysql之插入数据

    之前有写过一篇python查询mysql数据的文章,今天写通过python插入数据到mysql数据库. 相关mysql视频教程推荐:<mysql教程> 先建库,建表,建用户mysql> ...

  6. golang MySQL 占内存_golang操作mysql使用总结

    前言 Golang 提供了database/sql包用于对SQL数据库的访问, 作为操作数据库的入口对象sql.DB, 主要为我们提供了两个重要的功能: sql.DB 通过数据库驱动为我们提供管理底层 ...

  7. visual MySQL 教程_Visual Studio操作MySQL的详细步骤

    MySQL是最流行的关系型数据库管理系统,在Web应用方面是最好的RDBMS应用软件之一,作为开放源码软件,可大大降低总体拥有成本.Visual Studio也是我们常用的开发工具,那么怎样通过Vis ...

  8. php mysql 替换 pdo,php操作MySQL数据库之PDO方式

    这篇文章主要介绍了关于php操作MySQL数据库之PDO方式 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下基本使用 1)连接数据库$pdo = new PDO("mysql ...

  9. mysql 导出数据字典_操作MySQL?这个库比pymysql香一百倍

    原创: 阿亮 Python极客社区 操作MySQL,我们都习惯于用pymsq,基本流程就是 创建连接 创建游标 执行SQL 关闭连接 代码是这样的 import pymysql# 1.创建连接conn ...

最新文章

  1. Nginx HttpMemcModule和直接访问memcached效率对比测试
  2. tcp-ip协议详解二知识进阶
  3. 使用FLANN进行特征点匹配
  4. texmaker中图片过大怎么办_【社工面试】社区居民楼起火,你怎么办?
  5. 监控GoldenGate进程
  6. java Lock 源码分析
  7. 使用Hybris commerce的promotion rule进行促销活动
  8. VHDL设计四位二进制加法器和乘法器
  9. plt.subplots中的ax = ax.flatten()
  10. hadoop-eclipse-plugin使用
  11. linux如何运行python_[TimLinux] Python如何运行程序
  12. Spring-web-RequestContextHolder/RequestAttributes/HttpServletRequest
  13. azure api 管理_通过成本管理跟踪Azure成本
  14. 108次练习之模拟实现STL中的Vector(一)
  15. 宜宾学院教务系统(金智教务系统)成绩爬虫
  16. 转:MediaCoder H.264格式编码参数设置及详解
  17. PDF怎么打印?为什么有时选择打印没有反应?
  18. 30A的MOS现在价格都下探到1块了,为什么你还在用继电器?
  19. 2021 牛津大学:Recent Advances in Reinforcement Learning in Finance
  20. layUI中使用layer.open,在content打开数据表格,获取值并返回

热门文章

  1. windows10下VM安装安卓虚拟机PhoenixOS
  2. 台式计算机怎样能搜无线连接,电脑如何连无线网_台式电脑怎么连接wifi步骤-win7之家...
  3. SaltStack数据系统
  4. 技术人的软实力(0)不可忽视的软实力培养
  5. 匿名上位机v2.6和V7自定义帧代码和飞控姿态代码
  6. MD5、SHA1、SHA256、SHA512
  7. 文档服务器备份策略,裸金属服务器创建备份策略
  8. 要善于借势破局——宁向东的清华管理学课第4课
  9. linux下cuda cudnn安装 没有权限的安装
  10. Spyder 运行时kernels启动报错