Node使用MySQL

一、认识mysql2

如何可以在Node的代码中执行SQL语句来,这里我们可以借助于两个库:

  1. mysql:最早的Node连接MySQL的数据库驱动;
  2. mysql2:在mysql的基础之上,进行了很多的优化、改进;目前相对来说,我更偏向于使用mysql2,mysql2兼容mysql的API,并且提供了一些附加功能
  • 更快/更好的性能;
  • Prepared Statement(预编译语句):

提高性能:将创建的语句模块发送给MySQL,然后MySQL编译(解析、优化、转换)语句模块,并且存储它但是不执行,之后我们在真正执行时会给?提供实际的参数才会执行;就算多次执行,也只会编译一次,所以性能是更高的;

防止SQL注入:之后传入的值不会像模块引擎那样就编译,那么一些SQL注入的内容不会被执行;or 1 = 1不会被执行;

  • 支持Promise,所以我们可以使用async和await语法

所以后续的学习中会选择mysql2在node中操作数据。

二、使用mysql2

  1. 安装mysql2
  2. mysql2的使用过程如下:
    第一步:创建连接(通过createConnection),并且获取连接对象;
    在这里插入图片描述

第二步:执行SQL语句即可(通过query);
在这里插入图片描述
在这里插入图片描述

const mysql = require('mysql2')// 1. 创建数据库连接
const connection = mysql.createConnection({host: 'localhost',port: 3306,database: 'coderhub',user: 'root',password: 'root'
})// 2. 执行sql语句
const statement = `select * from products where price > 9000`
connection.query(statement, (err, results, fields) => {// console.log(err)console.log(results)// console.log(fields)// connection.end()connection.destroy()
})

三、Prepared Statement

Prepared Statement(预编译语句):

  1. 提高性能:将创建的语句模块发送给MySQL,然后MySQL编译(解析、优化、转换)语句模块,并且存储
    它但是不执行,之后我们在真正执行时会给?提供实际的参数才会执行;就算多次执行,也只会编译一次,所
    以性能是更高的;
  2. 防止SQL注入:之后传入的值不会像模块引擎那样就编译,那么一些SQL注入的内容不会被执行;or 1 = 1不
    会被执行;

在这里插入图片描述
强调:如果再次执行该语句,它将会从LRU(Least Recently Used) Cache中获取获取,省略了编译statement的时间来提高性能。
在这里插入图片描述

四、Connection Pools

前面我们是创建了一个连接(connection),但是如果我们有多个请求的话,该连接很有可能正在被占用,那么我们是否需要每次一个请求都去创建一个新的连接呢?

  1. 事实上,mysql2给我们提供了连接池(connection pools);
  2. 连接池可以在需要的时候自动创建连接,并且创建的连接不会被销毁,会放到连接池中,后续可以继续使用;
  3. 我们可以在创建连接池的时候设置LIMIT,也就是最大创建个数;

在这里插入图片描述
在这里插入图片描述

五、Promise方式

目前在JavaScript开发中我们更习惯Promise和await、async的方式,mysql2同样是支持的:
在这里插入图片描述

六、认识ORM

对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计的方案:

  • 从效果上来讲,它提供了一个可在编程语言中,使用 虚拟对象数据库 的效果;
  • 比如在Java开发中经常使用的ORM包括:Hibernate、MyBatis;
    在这里插入图片描述

Node当中的ORM我们通常使用的是 sequelize;

  • Sequelize是用于Postgres,MySQL,MariaDB,SQLite和Microsoft SQL Server的基于Node.js 的 ORM;
  • 它支持非常多的功能;

如果我们希望将Sequelize和MySQL一起使用,那么我们需要先安装两个东西:

  • mysql2:sequelize在操作mysql时使用的是mysql2;
  • sequelize:使用它来让对象映射到表中;

npm install sequelize mysql2

七、Sequelize的使用

Sequelize的连接数据库:

  1. 第一步:创建一个Sequelize的对象,并且指定数据库、用户名、密码、数据库类型、主机地址等;
  2. 第二步:测试连接是否成功;

在这里插入图片描述

八、Sequelize映射关系表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

const { Sequelize, DataTypes, Model, Op } = require('sequelize')
const sequelize = new Sequelize('coderhub', 'root', 'root', {host: 'localhost',dialect: 'mysql'
})
class Product extends Model {}
Product.init({id: {type: DataTypes.INTEGER,primaryKey: true,autoIncrement: true},title: {type: DataTypes.STRING,allowNotNull: false},price: DataTypes.DOUBLE,score: DataTypes.DOUBLE
}, {tableName: 'products',createdAt: false,updatedAt: false,sequelize
})
async function queryProducts() {// 1. 查询数据库中products表中的所以内容/*const result = await Product.findAll({where: {price: {[Op.gte]: 9000}}})console.log(result)*/// 2. 插入数据/*const result = await Product.create({title: '三星zep',price: 99999,score: 10})console.log(result)*/const result = await Product.update({price: 3333}, {where: {id: 1}})console.log(result)
}
queryProducts()

九、Sequelize 一对多关系

在这里插入图片描述
在这里插入图片描述

十、Sequelize多对多关系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470336.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java安装后在哪里打开_冷却塔声屏障安装后降噪效果不理想,原因出在哪里?...

现有冷却塔大部分产品都不能满足噪音环保标准,只有少数几种低吨位超低噪声型号的冷却塔可以满足少部分区域噪声标准要求。在一些商住混合区,冷却塔的出风口强烈的噪声和热气往往干扰附近居民不得安宁,所以冷却塔的噪声问题成为环境投诉的热点…

iOS10 权限崩溃问题

iOS10 权限崩溃问题 原文: http://blog.csdn.net/runleelrg/article/details/51673025 今天 手机升级了 iOS10 Beta,然后用正在开发的项目 装了个ipa包,发现点击有关 权限访问 直接Crash了,并在控制台输出了一些信息: This app h…

Koa框架——coderhub实战

https://github.com/zep03/koa-coderhub/commits/main 一、coderhub功能接口说明 Coderhub旨在创建一个程序员分享生活动态的平台。 完整的项目接口包括: 面向用户的业务接口;面向企业或者内部的后台管理接口; 完成的功能如下:…

python 协程_Python多任务协程

协程协程,又称微线程,纤程。英文名Coroutine。协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。为啥说它是一个执行单元,因为它自带CPU上下文。这样只要在合适的时机,…

python局域网大文件_[源码]Python简易http服务器(内网渗透大文件传输含下载命令)...

Python简易http服务器源码import SimpleHTTPServerimport SocketServerimport sysPORT 80if len(sys.argv) ! 2:print("use: web.exe port")else:PORT int(sys.argv[1])Handler SimpleHTTPServer.SimpleHTTPRequestHandlerhttpd SocketServer.TCPServer(("&…

CoderHub接口文档

CoderHub接口文档 Coderhub旨在创建一个程序员分享生活动态的平台。 完成的功能如下: 用户管理系统 内容管理系统 内容评论管理 内容标签管理 文件管理系统 接口完整请求示例:http://127.0.0.1:8000/users github仓库:https://github.com…

Spring 概况

网站:http://spring.io/ http://projects.spring.io/spring-framework Spring是一个开源框架,为了解决企业应用开发的复杂性而创建的,但现在已经不止应用于企业应用。 是一个轻量级的控制反转(IoC)和面向切面&#xff…

属于python应用领域的有数据可视化_Python数据可视化

译者序前 言第1章 数据可视化概念框架11.1 数据、信息、知识和观点21.1.1 数据21.1.2 信息21.1.3 知识31.1.4 数据分析和观点31.2 数据转换41.2.1 数据转换为信息41.2.2 信息转换为知识71.2.3 知识转换为观点71.3 数据可视化历史81.4 可视化如何帮助决策101.4.1 …

JavaScript高级之构造函数和原型

1.1 概述 在典型的 OOP 的语言中(如 Java),都存在类的概念,类就是对象的模板,对象就是类的实例,但在 ES6之前, JS 中并没用引入类的概念。 ES6, 全称 ECMAScript 6.0 ,2…

wget python3_python wget

wget -nH -K -E -d -np -L -r http://flatfull.com/themes/scale/-np 递归下载时不搜索上层目录-nH, –no-host-directories 不创建主机目录-d, –debug 打印调试输出-L 递归时不进入其它主机-E //将所有text/html文档以.html扩展名保存-r 递归抓取-k 抓取之后修正链…

JavaScript高级之继承

ES6之前并没有给我们提供 extends 继承。我们可以通过构造函数原型对象模拟实现继承,被称为组合继承。 2.1 call() 调用这个函数, 并且修改函数运行时的 this 指向 fun.call(thisArg, arg1, arg2, …) thisArg :当前调用函数 this 的指向对象arg1&…

【代码笔记】iOS-UILable电子表显示

一&#xff0c;效果图。 二&#xff0c;代码。 RootViewController.h #import <UIKit/UIKit.h>interface RootViewController : UIViewController {UILabel *label;NSDateFormatter *dateFormatter ; } end RootViewController.m #import "RootViewController.h&qu…

python cpu_python 让cpu满载

python 让cpu满载发布时间&#xff1a;2018-07-29 17:25:11编辑&#xff1a;admin阅读(5939)搞zabbix监控的时候&#xff0c;linux服务器的负载很低&#xff0c;如何写一个python脚本&#xff0c;让它满载呢&#xff1f;网上搜了一堆&#xff0c;发现各种不靠谱。后来终于发现了…

JavaScript高级之ES5 中的新增方法

3.1 ES5 新增方法概述 ES5 中给我们新增了一些方法&#xff0c;可以很方便的操作数组或者字符串&#xff0c;这些方法主要包括&#xff1a; 数组方法字符串方法对象方法 3.2 数组方法 迭代(遍历)方法&#xff1a;forEach()、map()、filter()、some()、every()&#xff1b; …

extjs 事件

。。转载于:https://www.cnblogs.com/glblog/p/5732636.html

python定位二维码_图像中二维码的检测和定位

二维码二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的&#xff1b;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念&#xff0c;使用若干个与二进制相对应的几何…

JavaScript高级之函数进阶

1. 函数的定义和调用 1.1 函数的定义方式 函数声明方式 function 关键字 (命名函数)函数表达式 (匿名函数)new Function() Function 里面参数都必须是字符串格式第三种方式执行效率低&#xff0c;也不方便书写&#xff0c;因此较少使用所有函数都是 Function 的实例(对象)…

kafka Failed to send messages after 3 tries 问题解决

kafka Failed to send messages after 3 tries. 在kafka0.8开发过程中 生产者测试用例碰到了 Exception in thread "main" kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.at kafka.producer.async.DefaultEventHandler.handle(…

react 前端解析二进制流_一年半前端跳槽面试经验(头条、微信、shopee)

在2019年末的时候&#xff0c;突然想搞点大事&#xff0c;思来想去&#xff0c;感觉只有跳槽是最刺激的。由于我比较懒&#xff0c;不想换城市&#xff0c;所以这次只面试了头条、微信和 shopee。十分幸运&#xff0c;都拿到了 offer。接下来就简单的说下大家关心的面试题吧。问…

国内app快速生成平台对比

泰格老虎 2013-03-07 00:39:10 这是海恒CEO高鹏写的一篇国内app快速生成平台对比文章&#xff0c;介绍了国内快速生成APP的平台与自己平台的对比&#xff0c;很有参考价值。同类网站安米网 http://www.appbyme.org/追信 http://app.zhui.cn/简网app工厂 http://app.cutt.com/ap…