【Node专栏】Node开源项目DB初始化
一、简介
平常下载一些开源项目的时候,我们只需修改配置文件,就会帮我们创建好对应的数据库表,本文记录一些常用的方法。
二、初始化DB表方法集合
2.1 通过代码进行初始化
Node.js
是一种运行在服务器端的 JavaScript
运行环境,它可以与多种数据库进行交互。要导入 SQL
文件到 Node.js
应用程序中,可以使用以下步骤:
- 安装适当的
SQL
模块:在 Node.js
中,有很多 SQL
模块可供选择,比如 mysql
, mysql2
, pg
等。可以使用 npm
命令来安装所需的模块,例如:npm install mysql2
。
- 连接到数据库:使用
SQL
模块提供的 API 连接到数据库,例如 mysql2
模块提供了 createConnection
方法用于连接 MySQL
数据库。连接到数据库后,可以执行 SQL
语句。
- 读取
SQL
文件:使用 Node.js
提供的文件系统模块(如 fs
)读取 SQL
文件内容。
- 执行
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');
const connection = mysql.createConnection({ host: '${host}', user: '${user}', password: '${password}', database: '${db}', });
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.js
的 readline
模块逐行读取 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
这个一般还需要判断是否已经初始化过了。但是增量更新比较难搞。
三、总结
目前先写这两种方法,后续将一些开源项目的方法更新进来。