发布于 

【Node专栏】Node开源项目DB初始化

一、简介

平常下载一些开源项目的时候,我们只需修改配置文件,就会帮我们创建好对应的数据库表,本文记录一些常用的方法。

二、初始化DB表方法集合

2.1 通过代码进行初始化

Node.js 是一种运行在服务器端的 JavaScript 运行环境,它可以与多种数据库进行交互。要导入 SQL 文件到 Node.js 应用程序中,可以使用以下步骤:

  1. 安装适当的 SQL 模块:在 Node.js 中,有很多 SQL 模块可供选择,比如 mysql, mysql2, pg 等。可以使用 npm 命令来安装所需的模块,例如:npm install mysql2
  2. 连接到数据库:使用 SQL 模块提供的 API 连接到数据库,例如 mysql2 模块提供了 createConnection 方法用于连接 MySQL 数据库。连接到数据库后,可以执行 SQL 语句。
  3. 读取 SQL 文件:使用 Node.js 提供的文件系统模块(如 fs)读取 SQL 文件内容。
  4. 执行 SQL 语句:将读取到的 SQL 文件内容作为参数传递给 SQL 模块提供的执行 SQL 语句的方法(如 query),执行 SQL 语句。

安装方式:

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const mysql = require('mysql2');
const fs = require('fs');
const readline = require('readline');

// 连接到 MySQL 数据库
const connection = mysql.createConnection({
host: '${host}',
user: '${user}',
password: '${password}',
database: '${db}',
});

// 逐行读取 SQL 文件内容并执行
const rl = readline.createInterface({
input: fs.createReadStream('init.sql', 'utf8'),
crlfDelay: Infinity
});

let sql = '';
rl.on('line', (line) => {
if (line.trim().endsWith(';')) {
sql += line.trim();
connection.query(sql, (error, results, fields) => {
if (error) throw error;
console.log('Executed SQL statement successfully!');
});
sql = '';
} else {
sql += line;
}
});

// 处理读取完毕事件
rl.on('close', () => {
if (sql !== '') {
connection.query(sql, (error, results, fields) => {
if (error) throw error;
console.log('Executed SQL statement successfully!');
});
}
console.log('Imported SQL file successfully!');
connection.end();
});

在上面的示例中,我们使用 Node.jsreadline 模块逐行读取 SQL 文件内容,并在读取每行后立即执行该行 SQL 语句。由于每个 SQL 语句都以分号结尾,因此我们在读取到以分号结尾的行时,将该行 SQL 语句添加到一个字符串变量中,并执行该字符串变量中的 SQL 语句。在读取完整个 SQL 文件后,输出导入成功的信息,并关闭数据库连接。

请注意,此示例仅供参考。在实际应用中,我们需要根据自己的需求进行适当的修改和调整。例如,我们可以根据需要更改数据库连接配置、调整 SQL文件路径、更改分隔符等。

然后我们在当前目录下面放一个init.sql 文件中放数据库语句。我们可以在里面比如加一个版本表,因为后续需要做增量更新。比如当前是1.1.0版本,我们需要执行1.2.0版本,1.3.0版本的sql文件,而不需要执行最早的init.sql了。

这个优势,自由度比较大,能满足很多的需求。

2.2 用mysql工具进行初始化

1
exec /usr/bin/mysqld --user=root --init-file=init.sql --console

相当于在dockerfile里面加一下启动脚本,类似可以参考:

https://github.com/X-Profiler/xprofiler-docker/blob/main/mysql/startup.sh

这个一般还需要判断是否已经初始化过了。但是增量更新比较难搞。

三、总结

目前先写这两种方法,后续将一些开源项目的方法更新进来。


如果你有什么意见和建议,可以点击: 反馈地址 进行反馈。