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

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

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

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

一、技術(shù)選型與準(zhǔn)備

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

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

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

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

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ù)庫所需的關(guān)鍵信息,包括主機(jī)地址、用戶名、密碼和數(shù)據(jù)庫名稱。sqlData對象則用于存儲從數(shù)據(jù)庫中查詢出來的數(shù)據(jù),初始化為空。connection對象是通過mysql.createConnection方法創(chuàng)建的數(shù)據(jù)庫連接實(shí)例,它是后續(xù)所有數(shù)據(jù)庫操作的入口。

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

連接數(shù)據(jù)庫是整個流程的第一步,代碼中通過一個函數(shù)connectDatabase來實(shí)現(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)的錯誤。如果連接成功,會在控制臺輸出相應(yīng)的提示信息,并通過resolve將成功信息傳遞出去。這種基于 Promise 的設(shè)計使得我們可以方便地在異步流程中處理數(shù)據(jù)庫連接的結(jié)果。

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

接下來是核心的導(dǎo)出表數(shù)據(jù)功能,由exportTableData函數(shù)實(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ù)已成功導(dǎo)出.`);
      resolve(`表${tableName} 數(shù)據(jù)已成功導(dǎo)出.`);
    });
  });
}

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

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

為了獲取數(shù)據(jù)庫中的所有表數(shù)據(jù),我們需要先獲取所有表名,這通過mysqlQuery函數(shù)實(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 查詢,并返回一個包含所有表名結(jié)果的 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("已全部導(dǎo)出!");
}

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

數(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已成功導(dǎo)出`);
}

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

導(dǎo)出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 文件的操作。當(dāng)所有操作完成后,使用process.exit(0)正常退出程序。

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

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

相關(guān)文章

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

    關(guān)于node.js版本npm -v報錯問題的解決方法

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

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

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

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

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

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

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

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

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

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

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

    Express系列之multer上傳的使用

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

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

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

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

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

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

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

最新評論