python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > PyQt5数据库导出Excel

基于PyQt5实现SqlServer数据库表导出Excel表格小工具

作者:Python 集中营

这篇文章主要为大家详细介绍了PyQt5的应用案例之实现SqlServer数据库表导出Excel表格小工具,文中的示例代码讲解详细,需要的小伙伴可以参考一下

1、功能说明

windows桌面应用,通过在应用界面输入SqlServer数据库相关信息后一件导出excel表格数据。

应用界面输入信息如下:

数据库IP:数据库所在服务器的ip地址;

数据库端口:数据库服务的port端口;

数据库名称:需要连接的数据库的名称;

用户名称:需要连接的数据库的用户名称;

密码:需要连接的数据库的密码;

表名:需要导出的数据库某张表的表名称;

2、设计思路

界面应用的UI设计通过python的PyQt5模块开发窗口页面功能,包括页面布局槽函数关联操作等。

数据库连接以及数据操作使用的是python的三方非标准库pymssql来完成数据库层面的处理。

Excel表格数据处理使用的是常用的pandas模块,可以快速的完成数据导出。

该工具使用的python模块信息如下:

from PyQt5.QtWidgets import *

from PyQt5.QtGui import *

from PyQt5.QtCore import *

import sys

from datetime import datetime

import pymssql

import pandas as pd

import image

其中image模块为打包后的图片资源模块,其他模块均为python的标准或者非标准库。

3、主要代码块

其中主要代码块为PyQt5应用的UI界面以及槽函数的关联和子线程模块的调用等。

最后通过QThread子线程调用业务逻辑代码块,从而实现对数据库以及Excel表格的处理。

主要代码块如下:

class DataBaseToExcelUI(QWidget):
    def __init__(self):
        super(DataBaseToExcelUI, self).__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('数据导出(SQLSERVER数据库导出为Excel)')
        self.setWindowIcon(QIcon(':/analysis.ico'))
        self.resize(300, 400)

        self.database_ip_label = QLabel()
        self.database_ip_label.setText('数据库IP:')

        self.database_ip_in = QLineEdit()
        self.database_ip_in.setText('192.168.10.10')

        self.database_port_label = QLabel()
        self.database_port_label.setText('数据库端口:')

        self.database_port_in = QLineEdit()
        self.database_port_in.setText('1513')

        self.database_name_label = QLabel()
        self.database_name_label.setText('数据库名称:')

        self.database_name_in = QLineEdit()
        self.database_name_in.setText('source_data')

        self.database_user_label = QLabel()
        self.database_user_label.setText('数据库用户名:')

        self.database_user_in = QLineEdit()
        self.database_user_in.setText('sa')

        self.database_pwd_label = QLabel()
        self.database_pwd_label.setText('数据库密码:')

        self.database_pwd_in = QLineEdit()
        self.database_pwd_in.setText('')

        self.database_table_label = QLabel()
        self.database_table_label.setText('数据表名称:')

        self.database_table_in = QLineEdit()
        self.database_table_in.setText('table_name')

        self.brower = QTextBrowser()
        self.brower.setReadOnly(True)
        self.brower.setFont(QFont('宋体', 8))
        self.brower.setPlaceholderText('日志处理过程区域...')
        self.brower.ensureCursorVisible()

        self.start_btn = QPushButton()
        self.start_btn.setText('开始导出')
        self.start_btn.clicked.connect(self.start_btn_clk)

        f_box = QFormLayout()
        f_box.addRow(self.database_ip_label, self.database_ip_in)
        f_box.addRow(self.database_port_label, self.database_port_in)
        f_box.addRow(self.database_name_label, self.database_name_in)
        f_box.addRow(self.database_user_label, self.database_user_in)
        f_box.addRow(self.database_pwd_label, self.database_pwd_in)
        f_box.addRow(self.database_table_label, self.database_table_in)
        f_box.addRow(self.start_btn)
        f_box.addRow(self.brower)

        self.thread_ = WorkThread(self)
        self.thread_.message.connect(self.show_message)
        self.thread_.finished.connect(self.finished)

        self.setLayout(f_box)

    def show_message(self, text):
        cursor = self.brower.textCursor()
        cursor.movePosition(QTextCursor.End)
        self.brower.append(text)
        self.brower.setTextCursor(cursor)
        self.brower.ensureCursorVisible()

    def finished(self, text):
        if text is True:
            self.start_btn.setEnabled(True)

    def start_btn_clk(self):
        self.start_btn.setEnabled(False)
        self.thread_.start()

以上代码块是应用窗体相关的主要操作,供小伙伴们开发参考。

下面是关于QThread子线程的部分创建过程,可以将业务相关的处理放到子线程中执行,这样便不会导致UI页面主线程出现阻塞等情况。

class WorkThread(QThread):
    message = pyqtSignal(str)
    finished = pyqtSignal(bool)

    def __init__(self, parent=None):
        super(WorkThread, self).__init__(parent)
        self.parent = parent
        self.working = True

    def __del__(self):
        self.working = False

到此这篇关于基于PyQt5实现SqlServer数据库表导出Excel表格小工具的文章就介绍到这了,更多相关PyQt5数据库导出Excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文