Use MySQL para crear una base de datos, use
node.js
un archivo de formato de datos existentejson
para generar un archivoMySQL
importabletxt
e impórtelo a la nueva base de datos.
A veces usamos json
archivos de formato para guardar algunos datos por conveniencia. Pero a medida que aumenta la cantidad de datos, json
los 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 MySQL
base de datos, para su acceso y gestión.
MySQL
Proporciona un comando simple txt
para importar datos de un archivo con un formato específico.En este archivo, las diferentes columnas se \t
delimitan \N
delimitando los valores faltantes ( NULL
) .1
Utilizamos node.js
herramientas para json
convertir archivos de formato en archivos MySQL
de 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, todo
una descripción de un trabajo está representada por una cadena, indica startDate
la hora en que se agregó el trabajo, precisa a μs, y el formato es YYYY-MM-DD hh-mm-ss.uuuuuu
; id
es un ID único, representado por un número entero; y isArchived
representa si el trabajo se completó, bool
representado por un valor.
MySQL
Es necesario crear una tabla de datos con un tipo de datos conocido de antemano, por lo tanto, primero creamos dicha tabla.
Primero, ingrese MySQL
el programa de línea de comando.
mysql -u root -p
En mysql, cree una nueva base de datos test
y luego aplique la base de datos.
create database test;
use test;
Luego, de acuerdo con nuestros json
datos, cree una nueva tabla todo
y id
configú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 MySQL
del tipo de entrada datetime
es YYYY-MM-DD hh-mm-ss
, no hay una parte decimal después del segundo 2. MySQL
No hay ningún tipo de entrada y bool
generalmente se 0
representa con .false
1
true
De esta manera, el trabajo preparatorio se completa básicamente.
utilizar node.js
datos de proceso
La conversión de archivos node.js
se realiza mediante su uso, que incluye principalmente las siguientes tareas:
- leer datos;
- Procesar datos para tipos de datos especiales (
bool
, );datetime
- convertir el formato de los datos;
- guardar datos;
Complete estas tareas a su vez.
leer datos
node.js
Viene con fs
un 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 convertJSON2TXT
los datos en la función y luego usamos saveTXT
los datos guardados.
Manejar datos para tipos de datos especiales
En esta parte, procesamos los datos de este elemento json
en 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"
MySQL
datetime
"YYYY-MM-DD hh-mm-ss"
"T"
" "
".565354"
A continuación, para isArchived
este artículo, 0
denote con false
, 1
denote 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;
}
todo
Los datos procesados se almacenan en .
Convertir formato de datos
Aquí, usamos para \t
separar las diferentes columnas. También tenga en cuenta que el orden de las columnas es el mismo que el orden de las columnas en MySQL
la tabla todo
, y el final de la fila está \r\n
separado.
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 fs
implementa 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 MySQL
la línea de comando, importe todo.txt
a 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.txt
desde el mismo directorio que el archivo o especificar la ruta absoluta del archivo.mysql
todo.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)