Python輕松實(shí)現(xiàn)將數(shù)據(jù)庫數(shù)據(jù)一鍵導(dǎo)出到Excel
最近需要將 SQLite 數(shù)據(jù)庫里的所有表都導(dǎo)出成 Excel 表格,本文記錄一下如何只用 Python 內(nèi)置庫 + 免費(fèi) Excel 處理庫,實(shí)現(xiàn)將數(shù)據(jù)庫所有表批量導(dǎo)出到一個(gè) Excel 文件(每個(gè)表對(duì)應(yīng)一個(gè)獨(dú)立工作表)。
一、環(huán)境準(zhǔn)備
Python 環(huán)境:3.6及以上版本均可
依賴庫安裝:
sqlite3:Python 自帶的 SQLite 數(shù)據(jù)庫操作庫,無需安裝
Free Spire.XLS:用于創(chuàng)建、寫入和格式化 Excel 文件的免費(fèi)版庫(注意限制)
打開命令行執(zhí)行安裝命令:
pip install Spire.Xls.Free
二、核心實(shí)現(xiàn)思路
通過以下 5 個(gè)步驟就能完成數(shù)據(jù)導(dǎo)出流程:
- 連接本地 SQLite 數(shù)據(jù)庫
- 獲取數(shù)據(jù)庫中所有表的名稱
- 創(chuàng)建空白 Excel 工作簿
- 遍歷每一張數(shù)據(jù)庫表:讀取表頭+數(shù)據(jù) → 新建工作表寫入 → 簡(jiǎn)單格式化
- 保存 Excel 文件,關(guān)閉數(shù)據(jù)庫連接
三、完整可運(yùn)行代碼
from spire.xls import *
from spire.xls.common import *
import sqlite3
# ---------------------- 1. 連接SQLite數(shù)據(jù)庫 ----------------------
# 替換為你的數(shù)據(jù)庫文件路徑(相對(duì)路徑/絕對(duì)路徑均可)
conn = sqlite3.connect("Sales Data.db")
cursor = conn.cursor()
# ---------------------- 2. 獲取數(shù)據(jù)庫中所有表名 ----------------------
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
# 提取所有表名,生成列表
tableNames = [name[0] for name in cursor.fetchall()]
# ---------------------- 3. 創(chuàng)建空白Excel工作簿 ----------------------
workbook = Workbook()
# 清空默認(rèn)工作表,避免多余表格
workbook.Worksheets.Clear()
# ---------------------- 4. 遍歷所有表,寫入Excel ----------------------
for tableName in tableNames:
# 4.1 獲取當(dāng)前表的列名(Excel表頭)
cursor.execute(f"PRAGMA table_info('{tableName}')")
columnsInfo = cursor.fetchall()
columnNames = [columnInfo[1] for columnInfo in columnsInfo]
# 4.2 獲取當(dāng)前表的所有數(shù)據(jù)
cursor.execute(f"SELECT * FROM {tableName}")
rows = cursor.fetchall()
# 4.3 新建工作表,名稱=數(shù)據(jù)庫表名
sheet = workbook.Worksheets.Add(tableName)
# 4.4 寫入表頭(第一行)
for i in range(len(columnNames)):
sheet.Range[1, i + 1].Value = columnNames[i]
# 4.5 寫入表數(shù)據(jù)(修復(fù)原代碼bug:從第0行開始遍歷,避免丟失第一條數(shù)據(jù))
for j in range(len(rows)):
row_data = rows[j]
for k in range(len(row_data)):
sheet.Range[j + 2, k + 1].Value = row_data[k]
# 4.6 表格格式化:自適應(yīng)行列寬度 (可選)
sheet.AllocatedRange.AutoFitRows() # 自適應(yīng)行高
sheet.AllocatedRange.AutoFitColumns() # 自適應(yīng)列寬
# ---------------------- 5. 保存文件并釋放資源 ----------------------
# 保存Excel到指定路徑
workbook.SaveToFile("DataBaseToExcel.xlsx", FileFormat.Version2016)
# 釋放Excel對(duì)象資源
workbook.Dispose()
# 關(guān)閉數(shù)據(jù)庫連接
conn.close()
print("數(shù)據(jù)導(dǎo)出完成!")
雖然示例用的是 SQLite,但換 MySQL、PostgreSQL 也不難,只要把 sqlite3 那塊換成對(duì)應(yīng)的連接方式就行,后面的處理邏輯完全一樣。
四、幾個(gè)關(guān)鍵點(diǎn)解析
表名獲?。?/strong>sqlite_master 是 SQLite 的系統(tǒng)表,存著所有表的結(jié)構(gòu)信息。這里篩選 type='table' 拿到的是用戶表,系統(tǒng)表會(huì)被過濾掉。
列名獲取:PRAGMA table_info 這個(gè)命令挺有用的,返回每個(gè)列的詳細(xì)信息。取第二個(gè)字段就是列名。
數(shù)據(jù)寫入的坐標(biāo)問題:sheet.Range[行, 列] 是從1開始的,不是0。所以表頭寫在第一行 Range[1, i+1],數(shù)據(jù)從第二行開始 Range[j+1, k+1]。
格式化的小細(xì)節(jié):AllocatedRange 指的是已經(jīng)被寫入數(shù)據(jù)的區(qū)域,不用自己算邊界,省事。AutoFitRows 和 AutoFitColumns 會(huì)自動(dòng)調(diào)整行高列寬,不用手動(dòng)調(diào)了。
最后
這是一個(gè)非常輕量化的 Python 數(shù)據(jù)導(dǎo)出方案,沒有復(fù)雜的框架和配置,核心代碼不到50行,就能實(shí)現(xiàn)數(shù)據(jù)庫多表一鍵導(dǎo)出Excel。無論是處理銷售數(shù)據(jù)、業(yè)務(wù)報(bào)表還是測(cè)試數(shù)據(jù),都能直接復(fù)用,大幅提升日常數(shù)據(jù)處理效率。
到此這篇關(guān)于Python輕松實(shí)現(xiàn)將數(shù)據(jù)庫數(shù)據(jù)一鍵導(dǎo)出到Excel的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)庫數(shù)據(jù)導(dǎo)出到Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python實(shí)現(xiàn)數(shù)據(jù)庫與Excel文件之間的數(shù)據(jù)自動(dòng)化導(dǎo)入與導(dǎo)出
- Python實(shí)現(xiàn)將MySQL數(shù)據(jù)庫查詢結(jié)果導(dǎo)出到Excel
- 使用Python實(shí)現(xiàn)將多表分批次從數(shù)據(jù)庫導(dǎo)出到Excel
- Python實(shí)現(xiàn)將sqlite數(shù)據(jù)庫導(dǎo)出轉(zhuǎn)成Excel(xls)表的方法
- Python實(shí)現(xiàn)將數(shù)據(jù)庫一鍵導(dǎo)出為Excel表格的實(shí)例
相關(guān)文章
Python機(jī)器學(xué)習(xí)應(yīng)用之基于LightGBM的分類預(yù)測(cè)篇解讀
這篇文章我們繼續(xù)學(xué)習(xí)一下GBDT模型的另一個(gè)進(jìn)化版本:LightGBM,LigthGBM是boosting集合模型中的新進(jìn)成員,由微軟提供,它和XGBoost一樣是對(duì)GBDT的高效實(shí)現(xiàn),原理上它和GBDT及XGBoost類似,都采用損失函數(shù)的負(fù)梯度作為當(dāng)前決策樹的殘差近似值,去擬合新的決策樹2022-01-01
Python pydotplus安裝及可視化圖形創(chuàng)建教程
這篇文章主要為大家介紹了Python pydotplus安裝及可視化圖形創(chuàng)建教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
python使用numpy讀取、保存txt數(shù)據(jù)的實(shí)例
今天小編就為大家分享一篇python使用numpy讀取、保存txt數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10
Python import用法以及與from...import的區(qū)別
這篇文章主要介紹了Python import用法以及與from...import的區(qū)別,本文簡(jiǎn)潔明了,很容易看懂,需要的朋友可以參考下2015-05-05
簡(jiǎn)化Python的Django框架代碼的一些示例
這篇文章主要介紹了簡(jiǎn)化Python的Django框架代碼的一些示例,實(shí)際上文中只是抽取了一些Django中最基本的功能用于簡(jiǎn)化入門者的上手復(fù)雜度,下,需要的朋友可以參考下2015-04-04
Python實(shí)現(xiàn)根據(jù)Excel表格某一列內(nèi)容與數(shù)據(jù)庫進(jìn)行匹配
這篇文章主要為大家詳細(xì)介紹了Python如何使用pandas庫和Brightway2庫實(shí)現(xiàn)根據(jù)Excel表格某一列內(nèi)容與數(shù)據(jù)庫進(jìn)行匹配,需要的可以參考下2025-02-02

