前言
👨🏫:当我们有这么一串json数据需要我们去存放到数据库时,我们该怎么办?
[{
"标题": "JavaScript高级程序设计(第4版)",
"图片": "https://www.ituring.com.cn/img/img-load.020f1e39.png",
"作者": "[美]马特·弗里斯比(Matt Frisbie)(作者)",
"translators": "李松峰(译者)"
}, {
"标题": "Python编程:从入门到实践(第2版)",
"图片": "https://www.ituring.com.cn/img/img-load.020f1e39.png",
"作者": "埃里克·马瑟斯(Eric Matthes)(作者)",
"translators": "袁国忠(译者)"
}]
🙋♂️:这还不简单,这么点数据手动添加进去呗🤪
👨🏫:确实是可行,但如果我有1k+条数据,那你不就傻眼了吗?
🙋♂️:那还有什么办法吗,快快教我。
👨🏫:还记得fs模块中读取文件的API——readFile
吗?我们可以利用它将数据读取后使用遍历的方式添加到数据库中。
读取文件
👨🏫:读取文件有两种方式:
- 异步读取——
readFile
- 同步读取——
readFileSync
异步读取readFile
👨🏫:同学们注意,由于该方法属于fs模块,使用前需要引入fs模块(var fs= require(“fs”) )
用法:fs.readFile(filename, [encoding], [callback(err,data)])
错误优先机制,回调函数的第一个参数为错误信息。
接收参数:
filename
文件路径options
option对象,包含 encoding,编码格式,该项是可选的。callback
回调,传递2个参数 异常err 和 文件内容 data
同步读取readFileSync
用法:fs.readFileSync(path[, options])
接收参数:
path
文件路径options
option对象,包含 encoding,编码格式,该项是可选的。
👨🏫:由于是同步的,所以不需要传回调函数
存入数据库
连接数据库
//导入mysql模块
const mysql = require('mysql');
//创建连接
var cnt = mysql.createConnection({
host: 'localhost',//域名
port: '3306',//端口
user: 'root',//数据库用户名
password: 'root',//数据库密码
database: 'test'//数据库名
});
//连接
cnt.connect();
读取文件
//导入fs模块
const fs = require('fs');
//这里的我读取的json文件名为book,将读取到的文件信息保存到data变量中
var data = fs.readFileSync('./book.json');
插入数据到数据库
//由于data目前还是json数据,所以需要将json数据转为对象
data = JSON.parse(data);
//遍历data对象,并且利用sql语句存入数据库
data.forEach((item, index) => {
var name = item['标题'];
var bookImg = item['图片'];
var author = item['作者'];
var translator = item.translators;
cnt.query(
`insert into books (name,bookImg,author,translator) values ('${name}','${bookImg}','${author}','${translator}')`,function(err,data){
if(err) throw err;
console.log(data);
}
);
});
👨🏫:数据库插入语句若不熟悉的同学,可以去翻翻之前的笔记——MySQL 常用语句