最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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

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

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

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

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

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

這個(gè)函數(shù)返回一個(gè) Promise,在connection.connect方法中,我們處理連接可能出現(xiàn)的錯(cuò)誤。如果連接成功,會(huì)在控制臺(tái)輸出相應(yīng)的提示信息,并通過resolve將成功信息傳遞出去。這種基于 Promise 的設(shè)計(jì)使得我們可以方便地在異步流程中處理數(shù)據(jù)庫(kù)連接的結(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)出.`);
    });
  });
}

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

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

為了獲取數(shù)據(jù)庫(kù)中的所有表數(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);
    });
  });
}

這個(gè)函數(shù)執(zhí)行SHOW TABLES的 SQL 查詢,并返回一個(gè)包含所有表名結(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)出!");
}

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

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

數(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)出`);
}

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

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

七、主流程執(zhí)行

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

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

run();

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

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

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

相關(guān)文章

  • Nest.js中使用HTTP五種數(shù)據(jù)傳輸方式小結(jié)

    Nest.js中使用HTTP五種數(shù)據(jù)傳輸方式小結(jié)

    本文主要介紹了Nest.js中使用HTTP五種數(shù)據(jù)傳輸方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • nodejs處理tcp連接的核心流程

    nodejs處理tcp連接的核心流程

    這篇文章主要介紹了nodejs處理tcp連接的核心流程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • node.js連接mongoose數(shù)據(jù)庫(kù)方法詳解

    node.js連接mongoose數(shù)據(jù)庫(kù)方法詳解

    之前我們都是通過shell來完成對(duì)數(shù)據(jù)庫(kù)的各種操作的,在開發(fā)中大部分時(shí)候我們都需要通過程序來完成對(duì)數(shù)據(jù)庫(kù)的操作。而Mongoose就是一個(gè)讓我們可以通過Node來操作MongoDB的模塊
    2022-08-08
  • node.js中cluster的使用教程

    node.js中cluster的使用教程

    這篇文章主要介紹了node.js中cluster的使用教程,分別介紹使用NODE中cluster利用多核CPU、通過消息傳遞來監(jiān)控工作進(jìn)程狀態(tài)以及終止進(jìn)程等功能,給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧
    2017-06-06
  • node.js使用cluster實(shí)現(xiàn)多進(jìn)程

    node.js使用cluster實(shí)現(xiàn)多進(jìn)程

    本文給大家詳細(xì)介紹了nodejs使用cluster模塊實(shí)現(xiàn)多進(jìn)程的方法和步奏,非常的細(xì)致全面,有需要的小伙伴可以參考下
    2016-03-03
  • nvm管理node無法正常切換node版本問題的解決方法

    nvm管理node無法正常切換node版本問題的解決方法

    相信一定會(huì)有存在一些小伙伴 明明都已經(jīng)按著操作卸載node 和安裝nvm 了但是 依舊無法正常通過nvm管理node,本文將給大家介紹nvm管理node無法正常切換node版本問題的解決方法,需要的朋友可以參考下
    2024-01-01
  • node.js實(shí)現(xiàn)http服務(wù)器與瀏覽器之間的內(nèi)容緩存操作示例

    node.js實(shí)現(xiàn)http服務(wù)器與瀏覽器之間的內(nèi)容緩存操作示例

    這篇文章主要介紹了node.js實(shí)現(xiàn)http服務(wù)器與瀏覽器之間的內(nèi)容緩存操作,結(jié)合實(shí)例形式分析了node.js http服務(wù)器與瀏覽器之間的內(nèi)容緩存原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2020-02-02
  • Node實(shí)現(xiàn)前端本地開發(fā)接口代理服務(wù)

    Node實(shí)現(xiàn)前端本地開發(fā)接口代理服務(wù)

    本文主要介紹了Node實(shí)現(xiàn)前端本地開發(fā)接口代理服務(wù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • nodejs中npx 命令的使用小結(jié)

    nodejs中npx 命令的使用小結(jié)

    npx是npm 5.2+內(nèi)置的工具,可直接運(yùn)行Node.js包的可執(zhí)行文件而無需安裝,本文就來介紹一下nodejs中npx 命令的使用小結(jié),感興趣的可以了解一下
    2026-01-01
  • PM2部署與管理Node.js項(xiàng)目的步驟

    PM2部署與管理Node.js項(xiàng)目的步驟

    使用 PM2(Process Manager 2)來部署Node.js項(xiàng)目是一種非常流行的方法,因?yàn)樗梢詭椭愎芾?nbsp;Node.js 應(yīng)用的進(jìn)程,包括啟動(dòng)、停止、重啟和監(jiān)控,下面介紹如何使用PM2部署一個(gè)Node.js項(xiàng)目的步驟,感興趣的朋友跟隨小編一起看看吧
    2025-10-10

最新評(píng)論

汉沽区| 乌苏市| 科尔| 双柏县| 祁门县| 海丰县| 阿瓦提县| 六枝特区| 桃园县| 平南县| 大田县| 星子县| 铜山县| 旬邑县| 宜都市| 广丰县| 慈溪市| 张掖市| 项城市| 文安县| 八宿县| 太和县| 循化| 眉山市| 太仆寺旗| 陕西省| 巴林左旗| 元谋县| 丘北县| 星子县| 东明县| 华阴市| 迁安市| 乌拉特后旗| 安化县| 华坪县| 康定县| 平顶山市| 万山特区| 理塘县| 德安县|