Use node.js para importar datos en formato json a MySQL

Use MySQL para crear una base de datos, use node.jsun archivo de formato de datos existente jsonpara generar un archivo MySQLimportable txte impórtelo a la nueva base de datos.

A veces usamos jsonarchivos de formato para guardar algunos datos por conveniencia. Pero a medida que aumenta la cantidad de datos, jsonlos datos almacenados en archivos no solo son inconvenientes para consultar, sino que también están llenos de riesgos al agregarlos o eliminarlos. Ahora esperamos transferir estos datos a la MySQLbase de datos, para su acceso y gestión.

MySQLProporciona un comando simple txtpara importar datos de un archivo con un formato específico.En este archivo, las diferentes columnas se \tdelimitan \Ndelimitando los valores faltantes ( NULL) .1

Utilizamos node.jsherramientas para jsonconvertir archivos de formato en archivos MySQLde formato importables txt.

Primeros preparativos

Hay tal pieza de datos en todo.json:

[
  {
    
    
    "todo":"早上7:00起","startDate":"2021-01-03T17:53:38.565354",
    "id":1,
    "isArchived":true
  }, {
    
    
    "todo":"第一个跑到学院楼","startDate":"2021-01-03T20:12:06.787177",
    "id":2,
    "isArchived":true
  }, {
    
    
    "todo":"单手杵地平板支撑","startDate":"2021-01-03T20:20:02.103439",
    "id":3,
    "isArchived":false
  }
]

Se puede ver que hay 3 datos, y cada dato contiene 4 elementos: todo, startDate, id, isArchived.Entre ellos, todouna descripción de un trabajo está representada por una cadena, indica startDatela hora en que se agregó el trabajo, precisa a μs, y el formato es YYYY-MM-DD hh-mm-ss.uuuuuu; ides un ID único, representado por un número entero; y isArchivedrepresenta si el trabajo se completó, boolrepresentado por un valor.

MySQLEs necesario crear una tabla de datos con un tipo de datos conocido de antemano, por lo tanto, primero creamos dicha tabla.

Primero, ingrese MySQLel programa de línea de comando.

mysql -u root -p

En mysql, cree una nueva base de datos testy luego aplique la base de datos.

create database test;
use test;

Luego, de acuerdo con nuestros jsondatos, cree una nueva tabla todoy idconfigúrela como la clave principal de incremento automático.

create table todo (
  id int not null auto_increment, 
  todo varchar(128) not null, 
  isArchived tinyint default 0, 
  startDate datetime, 
  primary key(id)
);

Use describe todo;el comando para ver el tipo de la tabla creada.

mysql> describe todo;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| todo       | varchar(128) | NO   |     | NULL    |                |
| isArchived | tinyint(4)   | YES  |     | 0       |                |
| startDate  | datetime     | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.03 sec)

Tenga en cuenta lo siguiente : 1. El formato predeterminado MySQLdel tipo de entrada datetimees YYYY-MM-DD hh-mm-ss, no hay una parte decimal después del segundo 2. MySQLNo hay ningún tipo de entrada y boolgeneralmente se 0representa con .false1true

De esta manera, el trabajo preparatorio se completa básicamente.

utilizar node.jsdatos de proceso

La conversión de archivos node.jsse realiza mediante su uso, que incluye principalmente las siguientes tareas:

  1. leer datos;
  2. Procesar datos para tipos de datos especiales ( bool, );datetime
  3. convertir el formato de los datos;
  4. guardar datos;

Complete estas tareas a su vez.

leer datos

node.jsViene con fsun módulo para leer y escribir archivos.

// transform-json-to-txt-for-mysql.js
const fs = require("fs");
fs.readFile("todo.json", (err, data) => {
    
    
  let todotxt = convertJSON2TXT(data); // 处理数据
  saveTXT(todotxt); // 保存数据
});

function convertJSON2TXT(data) {
    
    
  let todotxt = "";
  // TODO 针对特殊数据类型处理数据

  // TODO 转换数据格式

  return todotxt;
}

function saveTXT(todotxt) {
    
    
  // 保存数据
}

Procesamos convertJSON2TXTlos datos en la función y luego usamos saveTXTlos datos guardados.

Manejar datos para tipos de datos especiales

En esta parte, procesamos los datos de este elemento jsonen el archivo original (por ejemplo ) en el formato predeterminado del tipo en , es decir , primero cambiamos los datos originales en espacios y luego eliminamos los últimos 7 dígitos ( ).startDate"2021-01-03T17:53:38.565354"MySQLdatetime"YYYY-MM-DD hh-mm-ss""T"" "".565354"

A continuación, para isArchivedeste artículo, 0denote con false, 1denote con true.

function convertJSON2TXT(data) {
    
    
  let todotxt = '';
  // 针对特殊数据类型处理数据
  let todo = JSON.parse(data.toString());
  todo.forEach((val) => {
    
    
    val.isArchived = val.isArchived ? 1 : 0;
    val.startDate = val.startDate.replace("T", " ").substr(0, 19);
  });
  // TODO 转换数据格式

  return todotxt;
}

todoLos datos procesados ​​se almacenan en .

Convertir formato de datos

Aquí, usamos para \tseparar las diferentes columnas. También tenga en cuenta que el orden de las columnas es el mismo que el orden de las columnas en MySQLla tabla todo, y el final de la fila está \r\nseparado.

function convertJSON2TXT(data) {
    
    
  let todotxt = '';
  // 针对特殊数据类型处理数据
  let todo = JSON.parse(data.toString());
  todo.forEach((val) => {
    
    
    val.isArchived = val.isArchived ? 1 : 0;
    val.startDate = val.startDate.replace("T", " ").substr(0, 19);
  });
  // TODO 转换数据格式
  todo.forEach((val) => {
    
    
    todotxt += `${
      
      val.id}\t${
      
      val.todo}\t${
      
      val.isArchived}\t${
      
      val.startDate}\r\n`;
  })

  return todotxt.substr(0, todotxt.length - 2); // 去掉多余的行
}

guardar datos

Aquí, el ahorro de datos también se fsimplementa mediante módulos.

function saveTXT(todotxt) {
    
    
  // 保存数据
  fs.writeFile("todo.txt", todotxt, (err) => {
    
    
    if (err) {
    
    
      console.log("error occurs");
    } else {
    
    
      console.log("write to todo.txt:");
      console.log(todotxt);
    }
  });
}

El archivo final se puede ver en mi repositorio de GitHub.2

Ejecute el archivo para generar el archivo todo.txt.

$ node transform-json-to-txt-for-mysql.js
write to todo.txt:
1	早上7:00起	1	2021-01-03 17:53:38
2	第一个跑到学院楼	1	2021-01-03 20:12:06
3	单手杵地平板支撑	0	2021-01-03 20:20:02

Importación de archivos

Desde MySQLla línea de comando, importe todo.txta la tabla todo.

load data local infile './todo.txt' into table todo;

Tenga en cuenta que debe ingresar al programa de línea de comandos todo.txtdesde el mismo directorio que el archivo o especificar la ruta absoluta del archivo.mysqltodo.txt

load data local infile '/path/to/todo.txt' into table todo;

Comprueba los datos que se han introducido.

mysql> select * from todo;
+----+--------------------------+------------+---------------------+
| id | todo                     | isArchived | startDate           |
+----+--------------------------+------------+---------------------+
|  1 | 早上7:00起               |          1 | 2021-01-03 17:53:38 |
|  2 | 第一个跑到学院楼         |          1 | 2021-01-03 20:12:06 |
|  3 | 单手杵地平板支撑         |          0 | 2021-01-03 20:20:02 |
+----+--------------------------+------------+---------------------+
3 rows in set (0.00 sec)

  1. https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html ↩︎

  2. Todos los códigos ↩︎

Supongo que te gusta

Origin blog.csdn.net/weixin_41231535/article/details/113920062
Recomendado
Clasificación