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

Python實(shí)現(xiàn)數(shù)據(jù)庫(kù)數(shù)據(jù)自動(dòng)化導(dǎo)出PDF報(bào)告

 更新時(shí)間:2025年09月25日 10:17:07   作者:IT小本本  
本文將介紹如何使用Python構(gòu)建一個(gè)自動(dòng)化工具,實(shí)現(xiàn)從MySQL數(shù)據(jù)庫(kù)提取員工數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

本文將介紹如何使用Python構(gòu)建一個(gè)自動(dòng)化工具,實(shí)現(xiàn)從MySQL數(shù)據(jù)庫(kù)提取員工數(shù)據(jù),并為每位員工生成包含定制化表格的PDF報(bào)告。通過(guò)該方案,可顯著提升數(shù)據(jù)導(dǎo)出效率,避免手動(dòng)操作誤差,同時(shí)支持靈活的格式定制。

需求:從MySQL數(shù)據(jù)庫(kù)提取員工數(shù)據(jù),并為每位員工生成包含定制化表格的PDF報(bào)告。

最終想要的結(jié)果:

技術(shù)棧與核心功能

主要技術(shù)組件

數(shù)據(jù)庫(kù)連接:使用pymysql實(shí)現(xiàn)Python與MySQL的交互,支持字符集配置和字典游標(biāo)(便于數(shù)據(jù)處理)。

PDF生成:基于reportlab庫(kù)構(gòu)建PDF文檔,支持表格樣式定制、中文字體渲染和動(dòng)態(tài)內(nèi)容生成。

異常處理:通過(guò)try-except結(jié)構(gòu)和traceback模塊捕獲運(yùn)行時(shí)錯(cuò)誤,提供詳細(xì)日志便于調(diào)試。

文件管理:自動(dòng)創(chuàng)建輸出目錄,使用時(shí)間戳確保文件名唯一,避免文件覆蓋。

功能亮點(diǎn)

自動(dòng)檢測(cè)數(shù)據(jù)庫(kù)表結(jié)構(gòu),支持動(dòng)態(tài)字段提取

為每位員工生成獨(dú)立PDF,包含姓名、薪資等關(guān)鍵信息

定制化表格樣式(背景色、字體、邊框等)

完整的中文字體支持(通過(guò)注冊(cè)系統(tǒng)字體實(shí)現(xiàn))

核心代碼解析

1. 數(shù)據(jù)庫(kù)連接與數(shù)據(jù)獲取

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("數(shù)據(jù)庫(kù)連接成功!")
        return connection
    except Exception as e:
        # 詳細(xì)異常日志記錄
        print(f"數(shù)據(jù)庫(kù)連接錯(cuò)誤: {str(e)}")
        print("詳細(xì)錯(cuò)誤信息:\n", traceback.format_exc())
        return None

關(guān)鍵配置:使用DictCursor直接返回字典格式數(shù)據(jù),便于后續(xù)處理;charset='utf8mb4'確保支持 emoji 等特殊字符。

健壯性設(shè)計(jì):通過(guò)異常捕獲避免程序因數(shù)據(jù)庫(kù)連接失敗崩潰,并提供堆棧跟蹤信息。

數(shù)據(jù)表內(nèi)容:

2. 數(shù)據(jù)提取與表結(jié)構(gòu)校驗(yàn)

def get_employees_data(connection):
    try:
        with connection.cursor() as cursor:
            # 表存在性校驗(yàn)
            cursor.execute("SHOW TABLES LIKE 'employees'")
            if not cursor.fetchone():
                print("錯(cuò)誤:employees表不存在!")
                return None, None
                
            # 提取表結(jié)構(gòu)與數(shù)據(jù)
            cursor.execute("SHOW COLUMNS FROM employees")
            columns = [col['Field'] for col in cursor.fetchall()]
            cursor.execute("SELECT * FROM employees")
            data = cursor.fetchall()
            
            print(f"表結(jié)構(gòu): {columns}, 獲取到 {len(data)} 條記錄")
            return columns, data
    except Exception as e:
        # 數(shù)據(jù)操作異常處理
        print(f"獲取數(shù)據(jù)錯(cuò)誤: {str(e)}", traceback.format_exc())
        return None, None

預(yù)處理邏輯:先校驗(yàn)表是否存在,避免后續(xù)操作拋出未知錯(cuò)誤。

數(shù)據(jù)格式:返回字段列表和字典數(shù)組,便于與PDF生成模塊對(duì)接。

3. 個(gè)性化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()
        
        # 中文字體注冊(cè)(關(guān)鍵步驟)
        pdfmetrics.registerFont(TTFont('SimHei', 'SimHei.ttf'))
        title_style = ParagraphStyle(
            'CustomTitle',
            parent=styles['Heading1'],
            fontName='SimHei',
            fontSize=24,
            spaceAfter=30
        )
        
        # 表格數(shù)據(jù)與樣式
        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'),            # 全局居中對(duì)齊
            ('FONTNAME', (0,0), (-1,-1), 'SimHei'),          # 中文字體應(yīng)用
            ('GRID', (0,0), (-1,-1), 1, colors.black)        # 邊框設(shè)置
        ]))
        
        # 文檔元素組裝
        elements = [
            Paragraph(f"{employee_data['name']}的個(gè)人信息", title_style),
            Spacer(1, 20),
            table
        ]
        doc.build(elements)
        return path
    except Exception as e:
        print(f"生成PDF錯(cuò)誤: {str(e)}", traceback.format_exc())
        return None

中文字體解決方案:通過(guò)TTFont注冊(cè)本地字體文件(需將SimHei.ttf放在程序目錄或指定路徑),解決中文亂碼問(wèn)題。

樣式定制技巧

  • 分層設(shè)置背景色(表頭灰色,內(nèi)容米色)
  • 不同層級(jí)字體大?。ū眍^14pt,內(nèi)容12pt)
  • 全局居中對(duì)齊與邊框線增強(qiáng)可讀性

文件名策略:使用姓名+時(shí)間戳組合,確保唯一性并便于文件管理。

運(yùn)行前準(zhǔn)備

1、 安裝依賴(lài)庫(kù):

pip install pymysql reportlab

2、 字體文件準(zhǔn)備:

  • 從Windows系統(tǒng)字體目錄(C:\Windows\Fonts\SimHei.ttf)復(fù)制到程序目錄
  • 或替換為其他中文字體(如思源黑體),注意修改注冊(cè)字體名稱(chēng)

3、 數(shù)據(jù)庫(kù)配置:

  • 確保employees表存在,包含namesalary字段
  • 根據(jù)實(shí)際環(huán)境修改數(shù)據(jù)庫(kù)連接參數(shù)(主機(jī)、用戶(hù)名、密碼等)

運(yùn)行后的效果

以上就是Python實(shí)現(xiàn)數(shù)據(jù)庫(kù)數(shù)據(jù)自動(dòng)化導(dǎo)出PDF報(bào)告的詳細(xì)內(nèi)容,更多關(guān)于Python數(shù)據(jù)庫(kù)數(shù)據(jù)導(dǎo)出為PDF的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

石家庄市| 托里县| 洛川县| 泰来县| 大悟县| 清苑县| 海口市| 西和县| 海原县| 大渡口区| 乡宁县| 大同市| 乐清市| 南通市| 耒阳市| 志丹县| 公安县| 海丰县| 施甸县| 丹江口市| 岚皋县| 西乌珠穆沁旗| 青河县| 万宁市| 石林| 洞头县| 庆城县| 西充县| 资中县| 晋中市| 襄城县| 藁城市| 琼结县| 大名县| 林甸县| 江城| 庆安县| 公安县| 仙居县| 澳门| 湖州市|