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

 更新时间:2023年12月03日 09:41:53   作者: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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python Ajax爬虫案例分享

    Python Ajax爬虫案例分享

    这篇文章主要介绍了Python Ajax爬虫案例分享,文章会从街拍链接里面爬取图片结构,下面文章对正在学习的你有一定的帮助,需要的小伙伴可以参考一下
    2022-02-02
  • 在Python中操作字符串之rstrip()方法的使用

    在Python中操作字符串之rstrip()方法的使用

    这篇文章主要介绍了在Python中操作字符串之rstrip()方法的使用,是Python入门中的基础知识,需要的朋友可以参考下
    2015-05-05
  • python之流程控制语句match-case详解

    python之流程控制语句match-case详解

    这篇文章主要介绍了python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • 个人微信公众号接入ChatGPT的教程分享

    个人微信公众号接入ChatGPT的教程分享

    这篇文章主要为大家详细介绍了如何为个人微信公众号接入ChatGPT,文中的实现步骤讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-05-05
  • pytorch使用 to 进行类型转换方式

    pytorch使用 to 进行类型转换方式

    今天小编就为大家分享一篇pytorch使用 to 进行类型转换方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python生成词云的实现代码

    Python生成词云的实现代码

    这篇文章主要介绍了Python生成词云,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • python元组的可变与不可变问题

    python元组的可变与不可变问题

    这篇文章主要介绍了python元组的可变与不可变问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • python实现对一个完整url进行分割的方法

    python实现对一个完整url进行分割的方法

    这篇文章主要介绍了python实现对一个完整url进行分割的方法,涉及Python操作URL的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • python容器的内置通用函数操作

    python容器的内置通用函数操作

    容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中。接下来通过本文给大家介绍python容器的内置通用函数操作,感兴趣的朋友一起看看吧
    2021-11-11
  • Vue的el-scrollbar实现自定义滚动

    Vue的el-scrollbar实现自定义滚动

    本篇文章给大家分享了Vue的el-scrollbar实现自定义滚动实现的过程和实例代码,对此有需要的朋友可以参考下。
    2018-05-05

最新评论