欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nodejs腳本快速導(dǎo)出MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)

 更新時(shí)間:2024年10月23日 08:38:15   作者:JYeontu  
在數(shù)據(jù)庫(kù)管理和數(shù)據(jù)遷移的過(guò)程中,常常需要將數(shù)據(jù)庫(kù)中的表數(shù)據(jù)和結(jié)構(gòu)進(jìn)行導(dǎo)出,本文將使用Node.js編寫(xiě)一個(gè)腳本實(shí)現(xiàn)快速?gòu)腗ySQL數(shù)據(jù)庫(kù)中導(dǎo)出所有表的數(shù)據(jù)和結(jié)構(gòu),并保存為單獨(dú)的SQL文件,需要的可以參考下

說(shuō)在前面

在數(shù)據(jù)庫(kù)管理和數(shù)據(jù)遷移的過(guò)程中,常常需要將數(shù)據(jù)庫(kù)中的表數(shù)據(jù)和結(jié)構(gòu)進(jìn)行導(dǎo)出,以便進(jìn)行備份、共享或在不同環(huán)境中使用。數(shù)據(jù)庫(kù)數(shù)據(jù)備份的方法有很多,今天讓我們用 Node.js 來(lái)編寫(xiě)一個(gè)腳本,快速?gòu)?MySQL 數(shù)據(jù)庫(kù)中導(dǎo)出所有表的數(shù)據(jù)和結(jié)構(gòu),并保存為單獨(dú)的 SQL 文件。

腳本編寫(xiě)

1. 模塊引入

const mysql = require("mysql");
const fs = require("fs");
  • mysql模塊用于連接和操作MySQL數(shù)據(jù)庫(kù)
  • fs模塊用于文件操作,將數(shù)據(jù)寫(xiě)入文件。

2. 數(shù)據(jù)庫(kù)連接配置

const dbConfig = {
  host: "localhost",
  user: "root",
  password: "password",
  database: "test",
};

const connection = mysql.createConnection(dbConfig);

connection.connect((error) => {
  if (error) throw error;
  console.log("Successfully connected to the database.");
});

定義了數(shù)據(jù)庫(kù)連接配置對(duì)象dbConfig,包含主機(jī)名、用戶(hù)名、密碼和數(shù)據(jù)庫(kù)名等信息。然后使用mysql.createConnection創(chuàng)建數(shù)據(jù)庫(kù)連接,并通過(guò)connection.connect方法進(jìn)行連接,若連接成功則打印相應(yīng)信息。

3. 導(dǎo)出表數(shù)據(jù)和結(jié)構(gòu)的函數(shù)

function exportTableData(tableName, close = false) {
  connection.query(
    `SHOW CREATE TABLE ${tableName}`,
    (error, results, fields) => {
      if (error) throw error;

      const createTableStatement = results[0]["Create Table"];

      connection.query(
        `SELECT * FROM ${tableName}`,
        (error, results, fields) => {
          if (error) throw error;

          const insertStatements = results
            .map((row) => {
              const keys = [],
                values = [];
              Object.entries(row).forEach((item) => {
                keys.push(item[0]);
                values.push(`'${item[1]}'`);
              });
              return `INSERT INTO ${tableName} (${keys.join(
                ","
              )}) VALUES (${values.join(",")});`;
            })
            .join("\n");

          const sql = `${createTableStatement};\n\n${insertStatements}`;

          fs.writeFile(`${tableName}.sql`, sql, (err) => {
            if (err) throw err;
            console.log(`Data from ${tableName} exported successfully.`);
            if (close) {
              connection.end();
              console.log("All exported!");
            }
          });
        }
      );
    }
  );
}
  • 這個(gè)函數(shù)接受表名tableName作為參數(shù),還有一個(gè)可選參數(shù)close,用于控制是否在導(dǎo)出完成后關(guān)閉數(shù)據(jù)庫(kù)連接。
  • 首先查詢(xún)表的創(chuàng)建語(yǔ)句:
connection.query(
  `SHOW CREATE TABLE ${tableName}`,
  (error, results, fields) => {
    //...
  }
);

然后查詢(xún)表中的所有數(shù)據(jù):

connection.query(
  `SELECT * FROM ${tableName}`,
  (error, results, fields) => {
    //...
  }
);

對(duì)于查詢(xún)到的數(shù)據(jù),將每行數(shù)據(jù)轉(zhuǎn)換為INSERT INTO語(yǔ)句:

const insertStatements = results
 .map((row) => {
    const keys = [],
      values = [];
    Object.entries(row).forEach((item) => {
      keys.push(item[0]);
      values =append('${item[1]}');
    });
    return `INSERT INTO ${tableName} (${keys.join(
      ","
    )}) VALUES (${values.join(",")});`;
  })
 .join("\n");

最后將表的創(chuàng)建語(yǔ)句和所有數(shù)據(jù)的INSERT INTO語(yǔ)句組合起來(lái)寫(xiě)入到以表名命名的.sql文件中:

const sql = `${createTableStatement};\n\n${insertStatements}`;

fs.writeFile(`${tableName}.sql`, sql, (err) => {
  if (err) throw err;
  console.log(`Data from ${tableName} exported successfully.`);
  if (close) {
    connection.end();
    console.log("All exported!");
  }
});

4. 執(zhí)行導(dǎo)出操作

connection.query("SHOW TABLES", (error, results, fields) => {
  if (error) throw error;

  results.forEach((result, index) => {
    const tableName = result[`Tables_in_${dbConfig.database}`];
    exportTableData(tableName, index === results.length - 1);
  });
});

通過(guò)查詢(xún)數(shù)據(jù)庫(kù)中的所有表,然后對(duì)每個(gè)表調(diào)用exportTableData函數(shù)進(jìn)行數(shù)據(jù)和結(jié)構(gòu)的導(dǎo)出,當(dāng)處理到最后一個(gè)表時(shí),會(huì)根據(jù)exportTableData函數(shù)的close參數(shù)設(shè)置來(lái)決定是否關(guān)閉數(shù)據(jù)庫(kù)連接。

測(cè)試

創(chuàng)建數(shù)據(jù)庫(kù)

CREATE DATABASE test;

創(chuàng)建表

CREATE TABLE `t_user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int NOT NULL,
  PRIMARY KEY (`id`)
)

插入數(shù)據(jù)

INSERT INTO t_user (name,age) VALUES ('張三', 25);
INSERT INTO t_user (name,age) VALUES ('李四', 24);

導(dǎo)出數(shù)據(jù)

到此這篇關(guān)于Nodejs腳本快速導(dǎo)出MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Nodejs導(dǎo)出MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • nodejs連接mongodb數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查

    nodejs連接mongodb數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查

    本篇文章主要結(jié)合了nodejs操作mongodb數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查,包括對(duì)數(shù)據(jù)庫(kù)的增加,刪除,查找和更新,有興趣的可以了解一下。
    2016-12-12
  • node+vue實(shí)現(xiàn)用戶(hù)注冊(cè)和頭像上傳的實(shí)例代碼

    node+vue實(shí)現(xiàn)用戶(hù)注冊(cè)和頭像上傳的實(shí)例代碼

    本篇文章主要介紹了node+vue實(shí)現(xiàn)用戶(hù)注冊(cè)和頭像上傳的實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07
  • 如何在node.js中使用?JsonWebToken模塊進(jìn)行token加密

    如何在node.js中使用?JsonWebToken模塊進(jìn)行token加密

    目前在web框架中最流行的身份驗(yàn)證是使用jsonwebtoken,簡(jiǎn)稱(chēng)jwt.可以設(shè)置加密方式,過(guò)期時(shí)間,存放個(gè)人信息,逆解析,下面這篇文章主要給大家介紹了關(guān)于如何在node.js中使用?JsonWebToken模塊進(jìn)行token加密的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 解決linux下node.js全局模塊找不到的問(wèn)題

    解決linux下node.js全局模塊找不到的問(wèn)題

    今天小編就為大家分享一篇解決linux下node.js全局模塊找不到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 解決Mac安裝thrift因bison報(bào)錯(cuò)的問(wèn)題

    解決Mac安裝thrift因bison報(bào)錯(cuò)的問(wèn)題

    今天小編就為大家分享一篇解決Mac安裝thrift因bison報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Node.js 實(shí)現(xiàn)簡(jiǎn)單的無(wú)侵入式緩存框架的方法

    Node.js 實(shí)現(xiàn)簡(jiǎn)單的無(wú)侵入式緩存框架的方法

    這篇文章主要介紹了Node.js 實(shí)現(xiàn)簡(jiǎn)單的無(wú)侵入式緩存框架的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Node.js中process模塊常用的屬性和方法

    Node.js中process模塊常用的屬性和方法

    Node.js中的process模塊用來(lái)與當(dāng)前進(jìn)程互動(dòng),可以通過(guò)全局變量process訪問(wèn),不必使用require命令加載。它是一個(gè)EventEmitter對(duì)象的實(shí)例。下面這篇文章給大家介紹了Node.js中process模塊常用的屬性和方法,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-12-12
  • NodeJs環(huán)境中NODE_ENV介紹和設(shè)置方法

    NodeJs環(huán)境中NODE_ENV介紹和設(shè)置方法

    這篇文章主要給大家介紹了關(guān)于NodeJs環(huán)境中NODE_ENV介紹和設(shè)置的相關(guān)資料,NODE_ENV其實(shí)就是環(huán)境變量之一,用于設(shè)置nodejs當(dāng)前的運(yùn)行環(huán)境,需要的朋友可以參考下
    2024-07-07
  • Node.js開(kāi)發(fā)之套接字(socket)編程入門(mén)示例

    Node.js開(kāi)發(fā)之套接字(socket)編程入門(mén)示例

    這篇文章主要介紹了Node.js開(kāi)發(fā)之套接字(socket)編程,結(jié)合簡(jiǎn)單實(shí)例形式分析了node.js套接字socket客戶(hù)端與服務(wù)器端相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2019-11-11
  • Node.js連接MySQL數(shù)據(jù)庫(kù)的操作步驟

    Node.js連接MySQL數(shù)據(jù)庫(kù)的操作步驟

    在現(xiàn)代 Web 開(kāi)發(fā)中,與數(shù)據(jù)庫(kù)的交互是不可避免的一部分,Node.js提供了許多庫(kù)和模塊,使得連接和操作 MySQL 數(shù)據(jù)庫(kù)變得相對(duì)簡(jiǎn)單,本文將介紹如何使用Node.js連接MySQL數(shù)據(jù)庫(kù),并進(jìn)行一些基本的操作,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11

最新評(píng)論