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

Python實現數據庫數據自動化導出PDF報告

 更新時間:2025年09月25日 10:17:07   作者:IT小本本  
本文將介紹如何使用Python構建一個自動化工具,實現從MySQL數據庫提取員工數據,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

本文將介紹如何使用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表存在,包含namesalary字段
  • 根據實際環(huán)境修改數據庫連接參數(主機、用戶名、密碼等)

運行后的效果

以上就是Python實現數據庫數據自動化導出PDF報告的詳細內容,更多關于Python數據庫數據導出為PDF的資料請關注腳本之家其它相關文章!

相關文章

  • python程序 線程隊列queue使用方法解析

    python程序 線程隊列queue使用方法解析

    這篇文章主要介紹了python程序 線程隊列queue使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Python實現加載及解析properties配置文件的方法

    Python實現加載及解析properties配置文件的方法

    這篇文章主要介紹了Python實現加載及解析properties配置文件的方法,結合實例形式分析了Python針對properties配置文件的加載、讀取及解析相關操作技巧,需要的朋友可以參考下
    2018-03-03
  • python 多線程將大文件分開下載后在合并的實例

    python 多線程將大文件分開下載后在合并的實例

    今天小編就為大家分享一篇python 多線程將大文件分開下載后在合并的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 為Python的web框架編寫MVC配置來使其運行的教程

    為Python的web框架編寫MVC配置來使其運行的教程

    這篇文章主要介紹了為Python的web框架編寫MVC配置來使其運行的教程,示例代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04
  • python?opencv背景減去法摳圖實現示例

    python?opencv背景減去法摳圖實現示例

    這篇文章主要為大家介紹了python?opencv背景減去法摳圖實現示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • python數據歸一化及三種方法詳解

    python數據歸一化及三種方法詳解

    這篇文章主要介紹了python數據歸一化及三種方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • tensorflow -gpu安裝方法(不用自己裝cuda,cdnn)

    tensorflow -gpu安裝方法(不用自己裝cuda,cdnn)

    這篇文章主要介紹了tensorflow -gpu安裝,史上最新最簡單的途徑(不用自己裝cuda,cdnn),非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • PyCharm之如何設置自動換行問題

    PyCharm之如何設置自動換行問題

    這篇文章主要介紹了PyCharm之如何設置自動換行問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 利用Python實現批量打包程序的工具

    利用Python實現批量打包程序的工具

    auto-py-to-exe與pyinstaller都無法直接一次性打包多個程序,想打包多個程序需要重新操作一遍。所以本文將用Python實現批量打包程序的工具,感興趣的可以了解一下
    2022-07-07
  • 啟動Atom并運行python文件的步驟

    啟動Atom并運行python文件的步驟

    在本篇文章中我們給大家分享了啟動Atom并運行python文件的步驟以及具體做法,需要的朋友們參考下。
    2018-11-11

最新評論

施秉县| 淮安市| 喀喇沁旗| 大关县| 繁昌县| 淳安县| 桂东县| 鄄城县| 信阳市| 洱源县| 普兰县| 泽库县| 晋宁县| 彭山县| 渑池县| 无棣县| 左云县| 普兰县| 望谟县| 霍邱县| 游戏| 乡城县| 凤阳县| 保亭| 商水县| 阳原县| 沅陵县| 丰台区| 湘乡市| 桃园市| 金溪县| 行唐县| 浠水县| 延安市| 平顶山市| 石景山区| 壤塘县| 望都县| 太湖县| 信宜市| 陇川县|