MySQL を使用してデータベースを作成し、
node.js
既存のjson
データ形式ファイルを使用してMySQL
インポート可能なtxt
ファイルを生成し、それを新しいデータベースにインポートします。
便宜上、フォーマット ファイルを使用してjson
一部のデータを保存することがあります。しかし、データ量が増えると、json
ファイルに保存されたデータはクエリするのに不便なだけでなく、追加や削除の際に危険がいっぱいです。現在、これらのデータを次の場所に転送したいと考えています。MySQL
アクセスと管理のためのデータベース。
MySQL
txt
特定の形式のファイルからデータをインポートするための簡単なコマンドを提供します。このファイルでは、欠損値 ( )を区切る\t
ことによってさまざまな列が区切られています。1\N
NULL
当社では、フォーマット ファイルをインポート可能なフォーマットファイルに変換するnode.js
ツールを使用します。json
MySQL
txt
早めの準備
にそのようなデータがあります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
}
]
todo
データが 3 つあり、各データには、 、startDate
、の 4 つの項目が含まれていることがわかります。このうち、ジョブid
の説明は文字列で表されており、ジョブが追加された時刻を正確に示しています。;は整数で表される一意の ID であり、作業が完了したかどうかを値で表します。isArchived
todo
startDate
YYYY-MM-DD hh-mm-ss.uuuuuu
id
isArchived
bool
MySQL
あらかじめデータ型がわかっているデータテーブルを作成しておく必要があるので、まずそのようなテーブルを作成します。
まず、MySQL
コマンドラインプログラムを入力します。
mysql -u root -p
mysql で、新しいデータベースを作成しtest
、データベースを適用します。
create database test;
use test;
次に、データに従ってjson
新しいテーブルを作成しtodo
、id
それを自動インクリメント主キーとして設定します。
create table todo (
id int not null auto_increment,
todo varchar(128) not null,
isArchived tinyint default 0,
startDate datetime,
primary key(id)
);
コマンドを使用して、describe todo;
作成されたテーブルのタイプを表示します。
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)
ここで注意してください: 1.MySQL
の型のデフォルト形式はdatetime
でありYYYY-MM-DD hh-mm-ss
、2 番目以降に小数部分はありません; 2.MySQL
には型がなく、bool
通常はで0
表されfalse
ます。1
true
このようにして、基本的な準備作業は完了します。
node.js
プロセスデータを使用する
ファイル変換はnode.js
これを使用して行われ、主に次のタスクが含まれます。
- データを読み込みます。
- 特殊なデータ型 (
bool
、 ) のdatetime
データを処理します。 - データの形式を変換します。
- データを保存します。
これらのタスクを順番に完了してください。
読み取りデータ
node.js
fs
ファイルを読み書きするためのモジュールが付属しています。
// 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) {
// 保存数据
}
convertJSON2TXT
関数内でデータを加工し、保存したデータを使用しますsaveTXT
。
特殊なデータ型のデータを処理します
json
この部分では、元のファイル (例: ) 内のこのstartDate
項目のデータをのタイプのデフォルト形式"2021-01-03T17:53:38.565354"
に処理します。つまり、最初に元のデータをスペースに変更し、次に最後の 7 桁 ( ) を削除します。MySQL
datetime
"YYYY-MM-DD hh-mm-ss"
"T"
" "
".565354"
次に、isArchived
この項目については、0
で表しfalse
、1
で表します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
処理されたデータは に保存されます。
データ形式を変換する
ここでは、異なる列を区切るために を使用します\t
が、列の順序はMySQL
tableの列の順序と同じでありtodo
、行の末尾が\r\n
区切られていることに注意してください。
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); // 去掉多余的行
}
セーブデータ
ここでは、データの保存もfs
モジュールを使用して実装されています。
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);
}
});
}
最終的なファイルは、 GitHub リポジトリで参照できます。2
ファイルを実行してファイルを生成します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
ファイルのインポート
MySQL
コマンドラインからtodo.txt
table にインポートしますtodo
。
load data local infile './todo.txt' into table todo;
todo.txt
ファイルと同じディレクトリからmysql
コマンドライン プログラムを入力するか、todo.txt
ファイルの絶対パスを指定する必要があることに注意してください。
load data local infile '/path/to/todo.txt' into table todo;
入力されたデータを確認します。
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)