使用最新的MySQL2模块,mysql2是最新的Node.js调用MySQL驱动
本文从EXCEL中读取数据,然后使用一条语句将数据插入到MySQL中
js
INSERT INTO 学生 (序号, 学号, 姓名,性别)
VALUES
${str}
npm包地址 www.npmjs.com/package/mys...
mysql2中文文档:github.com/sidorares/n...
一、代码执行效果
二、读取EXCEL数据
目标得到:(1,22503,'王','女'),(2,22503,'叶甜','女')格式的数据
主函数代码:
js
const ExcelJS = require('exceljs')
//引入自定义模块myFun
const my = require('./my.js')
let 工具 = new my()
读取EXCEL()
async function 读取EXCEL() {
const 工作簿 = new ExcelJS.Workbook()
await 工作簿.xlsx.readFile('EXCEL/生菜前端.xlsx') // 替换为您的Excel文件路径
const 工作表 = 工作簿.worksheets[6]
console.log( 工具.getStr(工作表) )
}
读取一个Excel文件并打印一内容。具体来说,代码做了以下事情:
1.引入exceljs库:这是一个用于处理Excel文件的JavaScript库。
2.引入自定义模块my.js:一个my类。
3.调用读取EXCEL函数:这是一个异步函数,它执行以下操作:
1)创建一个新的ExcelJS工作簿对象。
2) 使用readFile方法异步读取指定路径的Excel文件。这个路径是EXCEL/生菜前端.xlsx,你需要替换为你实际的Excel文件路径。
3)获取工作簿的第7个工作表(在计算机中,索引从0开始,所以worksheets[6]指的是第7个工作表)。
使用工具.getStr方法处理工作表,并将结果打印到控制台
自定义类代码:
js
class my{
getStr(工作表){
let str = ''
let arr = this.to_arr(工作表)
for(let i=1; i<arr.length ; i++ ){
let one = arr[i]
let 单个 = `(${one[0]},${one[1]},'${one[2]}','${one[3]}'),`
str+= 单个
}
str = str.slice(0, -1);
return str
}
to_arr(工作表) {
let arr = []
工作表.eachRow((row, rowIndex) => {
let rowArr = []
row.eachCell((cell, colIndex) => {
rowArr.push(cell.value)
})
arr.push(rowArr)
})
return arr
}
to_cellObj(工作表){
let OBJ = {}
const colArr = ['占位','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
工作表.eachRow((row,rowIndex) => {
row.eachCell((cell, colIndex) => {
let 列名 = colArr[colIndex]
OBJ[列名+rowIndex] = cell.value
})
})
return OBJ
}
}
module.exports = my
三、数据库语句
sql
CREATE DATABASE 考勤 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE 考勤;
CREATE TABLE 年级 (
id INT AUTO_INCREMENT,
年级 INT,
专业 VARCHAR(255),
行政班名 VARCHAR(500),
班级编号 VARCHAR(100),
辅导员 VARCHAR(50),
PRIMARY KEY(id)
);
CREATE TABLE 课程 (
id INT AUTO_INCREMENT,
教室 TEXT,
时段 VARCHAR(255),
日期 DATE,
PRIMARY KEY(id)
);
INSERT INTO 课程
(教室,时段,日期)
VALUES
('615教室','1-4','2023-11-08'),
('606教室','5-8','2023-11-08');
CREATE TABLE 学生(
id INT AUTO_INCREMENT,
序号 INT,
学号 VARCHAR(100),
姓名 VARCHAR(200),
性别 VARCHAR(20),
QQ VARCHAR(200),
手机 VARCHAR(200),
PRIMARY KEY(id)
)
INSERT INTO 学生 (序号, 学号, 姓名,性别) VALUES (?, ?, ?, ?, ?)
四、完整代码
js
const mysql = require('mysql2/promise');
const ExcelJS = require('exceljs')
//引入自定义模块myFun
const my = require('./my.js')
let 工具 = new my()
main()
async function main(){
let config = {
host:'localhost',
port:3380,
user: 'root',
database: '考勤'
}
const pool = await mysql.createPool(config);
//从EXCEL中读取值
const 工作簿 = new ExcelJS.Workbook()
await 工作簿.xlsx.readFile('EXCEL/生菜前端.xlsx') // 替换为您的Excel文件路径
const 工作表 = 工作簿.worksheets[6]
let str = 工具.getStr(工作表)
let SQL = `
INSERT INTO 学生 (序号, 学号, 姓名,性别)
VALUES
${str}
`
const result = await pool.execute(SQL);
console.log(result[0])
}
这段代码是一个使用Node.js和ExcelJS库以及MySQL连接池的异步函数。
其主要功能是从一个Excel文件中读取数据,然后将这些数据插入到MySQL数据库中的一个表中:
1)let config = {...}
:定义了一个对象,包含了连接到MySQL数据库所需的配置。
2)const pool = await mysql.createPool(config)
:使用上述配置创建一个MySQL连接池。mysql2是一个最新的Node.js驱动mysql数据库模块。
3)const 工作簿 = new ExcelJS.Workbook()
:创建一个新的ExcelJS工作簿对象。
4)await 工作簿.xlsx.readFile('EXCEL/生菜前端.xlsx')
:异步读取指定路径的Excel文件。你需要替换路径为你实际的Excel文件路径。
5)const 工作表 = 工作簿.worksheets[6]
:获取工作簿中的第7个工作表(在EXCEL中,工作表索引从0开始)。
6)let str = 工具.getStr(工作表)
:调用自定义模块my.js中的getStr方法处理工作表,并将结果赋值给str。
- 定义SQL插入语句,其中${str}是之前从Excel文件中读取的数据,会被插入到SQL语句
8)const result = await pool.execute(SQL)
:使用连接池执行SQL插入语句。
9)console.log(result[0])
:打印插入操作的结果。
js
注意:此代码中使用的MySQL语法可能存在问题,特别是使用字符串模板插入多个值。这可能会导致SQL注入问题。为了防止这种情况,建议使用参数化查询或预编译语句。同时,请确保工具.getStr方法返回的数据格式与SQL插入语句的需求一致。
返回数据结果:
js
ResultSetHeader {
fieldCount: 0,
affectedRows: 46,
insertId: 95,
info: 'Records: 46 Duplicates: 0 Warnings: 0',
serverStatus: 2,
warningStatus: 0,
changedRows: 0
}
五、小结
注意插入语句返回结果在result[0]。