Python實現數據庫數據自動化導出PDF報告
本文將介紹如何使用Python構建一個自動化工具,實現從MySQL數據庫提取員工數據,并為每位員工生成包含定制化表格的PDF報告。通過該方案,可顯著提升數據導出效率,避免手動操作誤差,同時支持靈活的格式定制。
需求:從MySQL數據庫提取員工數據,并為每位員工生成包含定制化表格的PDF報告。

最終想要的結果:

技術棧與核心功能
主要技術組件
數據庫連接:使用pymysql實現Python與MySQL的交互,支持字符集配置和字典游標(便于數據處理)。
PDF生成:基于reportlab庫構建PDF文檔,支持表格樣式定制、中文字體渲染和動態(tài)內容生成。
異常處理:通過try-except結構和traceback模塊捕獲運行時錯誤,提供詳細日志便于調試。
文件管理:自動創(chuàng)建輸出目錄,使用時間戳確保文件名唯一,避免文件覆蓋。
功能亮點
自動檢測數據庫表結構,支持動態(tài)字段提取
為每位員工生成獨立PDF,包含姓名、薪資等關鍵信息
定制化表格樣式(背景色、字體、邊框等)
完整的中文字體支持(通過注冊系統字體實現)
核心代碼解析
1. 數據庫連接與數據獲取
import pymysql
def connect_to_database():
try:
connection = pymysql.connect(
host='127.0.0.1',
user='root',
password='root',
database='250515sj',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
print("數據庫連接成功!")
return connection
except Exception as e:
# 詳細異常日志記錄
print(f"數據庫連接錯誤: {str(e)}")
print("詳細錯誤信息:\n", traceback.format_exc())
return None
關鍵配置:使用DictCursor直接返回字典格式數據,便于后續(xù)處理;charset='utf8mb4'確保支持 emoji 等特殊字符。
健壯性設計:通過異常捕獲避免程序因數據庫連接失敗崩潰,并提供堆棧跟蹤信息。
數據表內容:

2. 數據提取與表結構校驗
def get_employees_data(connection):
try:
with connection.cursor() as cursor:
# 表存在性校驗
cursor.execute("SHOW TABLES LIKE 'employees'")
if not cursor.fetchone():
print("錯誤:employees表不存在!")
return None, None
# 提取表結構與數據
cursor.execute("SHOW COLUMNS FROM employees")
columns = [col['Field'] for col in cursor.fetchall()]
cursor.execute("SELECT * FROM employees")
data = cursor.fetchall()
print(f"表結構: {columns}, 獲取到 {len(data)} 條記錄")
return columns, data
except Exception as e:
# 數據操作異常處理
print(f"獲取數據錯誤: {str(e)}", traceback.format_exc())
return None, None
預處理邏輯:先校驗表是否存在,避免后續(xù)操作拋出未知錯誤。
數據格式:返回字段列表和字典數組,便于與PDF生成模塊對接。
3. 個性化PDF生成
def create_pdf_for_employee(employee_data, columns):
try:
# 目錄創(chuàng)建
output_dir = "employee_pdfs"
os.makedirs(output_dir, exist_ok=True)
# 字段篩選與中文表頭映射
export_data = [employee_data[col] for col in ['name', 'salary']]
filename = f"{employee_data['name']}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.pdf"
path = os.path.join(output_dir, filename)
# PDF文檔初始化
doc = SimpleDocTemplate(path, pagesize=letter)
styles = getSampleStyleSheet()
# 中文字體注冊(關鍵步驟)
pdfmetrics.registerFont(TTFont('SimHei', 'SimHei.ttf'))
title_style = ParagraphStyle(
'CustomTitle',
parent=styles['Heading1'],
fontName='SimHei',
fontSize=24,
spaceAfter=30
)
# 表格數據與樣式
table_data = [['姓名', '薪資'], export_data]
table = Table(table_data)
table.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), colors.grey), # 表頭背景色
('TEXTCOLOR', (0,0), (-1,0), colors.whitesmoke), # 表頭文字顏色
('ALIGN', (0,0), (-1,-1), 'CENTER'), # 全局居中對齊
('FONTNAME', (0,0), (-1,-1), 'SimHei'), # 中文字體應用
('GRID', (0,0), (-1,-1), 1, colors.black) # 邊框設置
]))
# 文檔元素組裝
elements = [
Paragraph(f"{employee_data['name']}的個人信息", title_style),
Spacer(1, 20),
table
]
doc.build(elements)
return path
except Exception as e:
print(f"生成PDF錯誤: {str(e)}", traceback.format_exc())
return None
中文字體解決方案:通過TTFont注冊本地字體文件(需將SimHei.ttf放在程序目錄或指定路徑),解決中文亂碼問題。
樣式定制技巧:
- 分層設置背景色(表頭灰色,內容米色)
- 不同層級字體大?。ū眍^14pt,內容12pt)
- 全局居中對齊與邊框線增強可讀性
文件名策略:使用姓名+時間戳組合,確保唯一性并便于文件管理。
運行前準備
1、 安裝依賴庫:
pip install pymysql reportlab
2、 字體文件準備:
- 從Windows系統字體目錄(
C:\Windows\Fonts\SimHei.ttf)復制到程序目錄 - 或替換為其他中文字體(如思源黑體),注意修改注冊字體名稱
3、 數據庫配置:
- 確保
employees表存在,包含name和salary字段 - 根據實際環(huán)境修改數據庫連接參數(主機、用戶名、密碼等)
運行后的效果

以上就是Python實現數據庫數據自動化導出PDF報告的詳細內容,更多關于Python數據庫數據導出為PDF的資料請關注腳本之家其它相關文章!
相關文章
Python實現加載及解析properties配置文件的方法
這篇文章主要介紹了Python實現加載及解析properties配置文件的方法,結合實例形式分析了Python針對properties配置文件的加載、讀取及解析相關操作技巧,需要的朋友可以參考下2018-03-03
tensorflow -gpu安裝方法(不用自己裝cuda,cdnn)
這篇文章主要介紹了tensorflow -gpu安裝,史上最新最簡單的途徑(不用自己裝cuda,cdnn),非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01

