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

利用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 文件是一項常見且實(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)文章

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

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

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

    nodejs處理tcp連接的核心流程

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

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

    之前我們都是通過shell來完成對數(shù)據(jù)庫的各種操作的,在開發(fā)中大部分時候我們都需要通過程序來完成對數(shù)據(jù)庫的操作。而Mongoose就是一個讓我們可以通過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版本問題的解決方法

    相信一定會有存在一些小伙伴 明明都已經(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ì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(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項目的步驟

    PM2部署與管理Node.js項目的步驟

    使用 PM2(Process Manager 2)來部署Node.js項目是一種非常流行的方法,因為它可以幫助你管理 Node.js 應(yīng)用的進(jìn)程,包括啟動、停止、重啟和監(jiān)控,下面介紹如何使用PM2部署一個Node.js項目的步驟,感興趣的朋友跟隨小編一起看看吧
    2025-10-10

最新評論

连云港市| 游戏| 肥东县| 裕民县| 玛多县| 临桂县| 商洛市| 宁强县| 小金县| 遂昌县| 将乐县| 呼伦贝尔市| 皮山县| 锦州市| 井陉县| 定结县| 满城县| 新平| 南澳县| 镇远县| 浦城县| 策勒县| 马鞍山市| 溆浦县| 玉山县| 搜索| 科技| 云梦县| 安远县| 宁化县| 定结县| 任丘市| 奉贤区| 镇平县| 论坛| 房山区| 阳泉市| 塘沽区| 东城区| 绥宁县| 玉林市|