亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

利用node實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)導出到Excel

 更新時間:2024年11月06日 08:22:34   作者:JYeontu  
本文將詳細講解如何使用Node.js實現(xiàn)從MySQL數(shù)據(jù)庫獲取數(shù)據(jù),并生成包含多個工作表的 Excel 文件,每個工作表對應數(shù)據(jù)庫中的一個表,有需要的可以了解下

在現(xiàn)代軟件開發(fā)中,數(shù)據(jù)的處理和展示是至關重要的環(huán)節(jié)。其中,將數(shù)據(jù)庫中的數(shù)據(jù)提取出來并轉換為直觀的 Excel 文件是一項常見且實用的需求。本文將詳細講解如何使用 Node.js 實現(xiàn)從 MySQL 數(shù)據(jù)庫獲取數(shù)據(jù),并生成包含多個工作表的 Excel 文件,每個工作表對應數(shù)據(jù)庫中的一個表。

一、技術選型與準備

Node.js 作為一個強大的后端開發(fā)平臺,為我們提供了豐富的模塊和庫來完成這個功能。我們主要使用了以下幾個關鍵的庫:

  • mysql 庫:這是用于與 MySQL 數(shù)據(jù)庫進行交互的核心庫。它允許我們建立連接、執(zhí)行 SQL 查詢等操作,是整個數(shù)據(jù)獲取過程的基礎。
  • ExcelJS 庫:專門用于在 Node.js 環(huán)境中創(chuàng)建和操作 Excel 文件。它提供了豐富的 API,可以方便地設置工作表、添加行列數(shù)據(jù)等。

二、數(shù)據(jù)庫連接配置

首先,我們需要配置數(shù)據(jù)庫連接信息。以下是相關的代碼片段:

const dbConfig = {
  host: "localhost",
  user: "root",//用戶名
  password: "root",//密碼
  database: "test",//數(shù)據(jù)庫名
};
const sqlData = {};//用于保存數(shù)據(jù)表數(shù)據(jù)
const connection = mysql.createConnection(dbConfig);

這里定義了一個dbConfig對象,其中包含了連接 MySQL 數(shù)據(jù)庫所需的關鍵信息,包括主機地址、用戶名、密碼和數(shù)據(jù)庫名稱。sqlData對象則用于存儲從數(shù)據(jù)庫中查詢出來的數(shù)據(jù),初始化為空。connection對象是通過mysql.createConnection方法創(chuàng)建的數(shù)據(jù)庫連接實例,它是后續(xù)所有數(shù)據(jù)庫操作的入口。

三、連接數(shù)據(jù)庫

連接數(shù)據(jù)庫是整個流程的第一步,代碼中通過一個函數(shù)connectDatabase來實現(xiàn):

function connectDatabase() {
  return new Promise((resolve) => {
    connection.connect((error) => {
      if (error) throw error;
      console.log("成功連接數(shù)據(jù)庫!");
      resolve("成功連接數(shù)據(jù)庫!");
    });
  });
}

這個函數(shù)返回一個 Promise,在connection.connect方法中,我們處理連接可能出現(xiàn)的錯誤。如果連接成功,會在控制臺輸出相應的提示信息,并通過resolve將成功信息傳遞出去。這種基于 Promise 的設計使得我們可以方便地在異步流程中處理數(shù)據(jù)庫連接的結果。

四、導出表數(shù)據(jù)

接下來是核心的導出表數(shù)據(jù)功能,由exportTableData函數(shù)實現(xiàn):

function exportTableData(tableName) {
  return new Promise((resolve) => {
    connection.query(`SELECT * FROM ${tableName}`, (error, results) => {
      if (error) throw error;
      sqlData[tableName] = results;
      console.log(`表${tableName} 數(shù)據(jù)已成功導出.`);
      resolve(`表${tableName} 數(shù)據(jù)已成功導出.`);
    });
  });
}

這個函數(shù)接受一個表名作為參數(shù),使用connection.query方法執(zhí)行一個SELECT *的 SQL 查詢語句,獲取指定表的所有數(shù)據(jù)。如果查詢過程中沒有錯誤,將查詢結果存儲在sqlData對象中,以表名為鍵。同時,在控制臺輸出表數(shù)據(jù)導出成功的信息,并通過resolve將成功信息返回,同樣是基于 Promise 的異步處理。

五、獲取所有表名與數(shù)據(jù)

為了獲取數(shù)據(jù)庫中的所有表數(shù)據(jù),我們需要先獲取所有表名,這通過mysqlQuery函數(shù)實現(xiàn):

function mysqlQuery() {
  return new Promise((resolve) => {
    connection.query("SHOW TABLES", (error, results) => {
      if (error) throw error;
      resolve(results);
    });
  });
}

這個函數(shù)執(zhí)行SHOW TABLES的 SQL 查詢,并返回一個包含所有表名結果的 Promise。

有了表名之后,我們可以通過getAllTableData函數(shù)來獲取所有表的數(shù)據(jù):

async function getAllTableData() {
  const reqList = [];
  const results = await mysqlQuery();
  results.forEach((result) => {
    const tableName = result[`Tables_in_${dbConfig.database}`];
    reqList.push(exportTableData(tableName));
  });
  await Promise.all(reqList);
  console.log("已全部導出!");
}

在這個異步函數(shù)中,首先調用mysqlQuery獲取所有表名,然后遍歷每個表名,調用exportTableData函數(shù)來獲取每個表的數(shù)據(jù),并將這些操作的 Promise 添加到reqList數(shù)組中。最后,使用Promise.all來等待所有的表數(shù)據(jù)導出操作完成,確保所有數(shù)據(jù)都被正確獲取后,在控制臺輸出已全部導出的信息。

數(shù)據(jù)庫中有這么兩張測試用的表

數(shù)據(jù)分別是

六、生成 Excel 文件

獲取到所有表的數(shù)據(jù)后,我們使用generateExcelFromJson函數(shù)將數(shù)據(jù)生成 Excel 文件:

async function generateExcelFromJson(jsonData) {
  const workbook = new ExcelJS.Workbook();

  for (const sheetName in jsonData) {
    const worksheet = workbook.addWorksheet(sheetName);
    worksheet.columns = Object.keys(jsonData[sheetName][0]).map((key) => ({
      header: key,
      key: key,
    }));
    jsonData[sheetName].forEach((rowData) => {
      worksheet.addRow(rowData);
    });
  }

  await workbook.xlsx.writeFile(`${dbConfig.database}.xlsx`);
  console.log(`${dbConfig.database}.xlsx已成功導出`);
}

在這個函數(shù)中,首先創(chuàng)建一個ExcelJSWorkbook實例。然后遍歷jsonData對象(其中存儲了所有表的數(shù)據(jù)),為每個表名創(chuàng)建一個工作表。對于每個工作表,通過分析數(shù)據(jù)的鍵來設置列標題,并將每一行數(shù)據(jù)添加到工作表中。最后,使用workbook.xlsx.writeFile方法將生成的 Excel 文件保存為以數(shù)據(jù)庫名命名的文件,并在控制臺輸出成功導出的信息。

導出excel數(shù)據(jù)如下:

七、主流程執(zhí)行

最后,通過run函數(shù)來組織整個流程:

async function run() {
  await connectDatabase();
  await getAllTableData();
  await generateExcelFromJson(sqlData);
  process.exit(0);
}

run();

run函數(shù)中,按照順序依次執(zhí)行連接數(shù)據(jù)庫、獲取所有表數(shù)據(jù)和生成 Excel 文件的操作。當所有操作完成后,使用process.exit(0)正常退出程序。

通過以上步驟,我們成功地實現(xiàn)了從 MySQL 數(shù)據(jù)庫中獲取數(shù)據(jù)并生成 Excel 文件的功能,為數(shù)據(jù)的進一步分析和處理提供了便利。這種方法在很多實際的業(yè)務場景中都有著廣泛的應用,比如數(shù)據(jù)備份、報表生成等。

到此這篇關于利用node實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)導出到Excel的文章就介紹到這了,更多相關node數(shù)據(jù)庫數(shù)據(jù)導出到Excel內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 關于node.js版本npm -v報錯問題的解決方法

    關于node.js版本npm -v報錯問題的解決方法

    最近工作中遇到了些問題,這里總結下,下面這篇文章主要給大家介紹了關于node.js版本npm -v報錯問題的解決方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • node.js讀取Excel數(shù)據(jù)(下載圖片)的方法示例

    node.js讀取Excel數(shù)據(jù)(下載圖片)的方法示例

    這篇文章主要給大家介紹了關于node.js讀取Excel數(shù)據(jù)(下載圖片)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用node.js具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-08-08
  • Node.js中path.resolve與path.join的區(qū)別與作用詳解

    Node.js中path.resolve與path.join的區(qū)別與作用詳解

    path.resolve和path.join都是屬于path核心模塊下的方法,用來拼接路徑,下面這篇文章主要給大家介紹了關于Node.js中path.resolve與path.join的區(qū)別與作用的相關資料,需要的朋友可以參考下
    2023-03-03
  • node版本與node-sass版本不兼容時的問題及解決

    node版本與node-sass版本不兼容時的問題及解決

    這篇文章主要介紹了node版本與node-sass版本不兼容時的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • node如何實現(xiàn)cmd彈窗交互之inquirer

    node如何實現(xiàn)cmd彈窗交互之inquirer

    這篇文章主要介紹了node如何實現(xiàn)cmd彈窗交互之inquirer問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • NodeJS配置CORS實現(xiàn)過程詳解

    NodeJS配置CORS實現(xiàn)過程詳解

    這篇文章主要介紹了NodeJS配置CORS實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • Express系列之multer上傳的使用

    Express系列之multer上傳的使用

    本篇文章主要介紹了Express系列之multer上傳的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 用nodejs實現(xiàn)json和jsonp服務的方法

    用nodejs實現(xiàn)json和jsonp服務的方法

    本篇文章主要介紹了用nodejs實現(xiàn)json和jsonp服務的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 如何使用nexus3搭建npm私有倉庫

    如何使用nexus3搭建npm私有倉庫

    這篇文章主要介紹了如何使用nexus3搭建npm私有倉庫,包括安裝并運行私服的相關知識,本文結合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • k8s node節(jié)點重新加入master集群的實現(xiàn)

    k8s node節(jié)點重新加入master集群的實現(xiàn)

    這篇文章主要介紹了k8s node節(jié)點重新加入master集群的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02

最新評論