首页 > 数据库 >SqlManger开发文档

SqlManger开发文档

时间:2023-12-18 15:35:39浏览次数:36  
标签:SqlManger self cursor connection 开发 ui install 文档 Utils

教程地址PyQt5 教程 (w3schools.cn)

开发记录

创建项目

新建python项目, 环境选择新的venv环境

安装必要依赖

当前依赖为项目新增依赖, 后续可能会随开发进行更新

# 提供了与 Python 3.5 或更高版本兼容的 32 位或 64 位架构的 wheels
pip3 install PyQt5
# 要安装 Qt Designer 等开发工具以支持 PyQt5 wheels
pip3 install pyqt5-tools
# 安装链接mysql所需依赖
pip3 install pymysql
# 链接mysql时所用到的加密方式
pip3 install cryptography
# 美化包依赖, 拉取依赖时, 不能使用豆瓣源, 豆瓣源没有这个依赖
pip3 install qdarkstyle 

如果直接使用官方镜像源出现安装失败的情况, 可以考虑国内的镜像源

# 清华源
pip3 install {package} -i https://pypi.tuna.tsinghua.edu.cn/simple
# 豆瓣源
pip3 install {package} -i https://pypi.douban.com/simple

安装依赖方式参考下图

设计UI

打开设计器路径 {项目路径}\venv\Lib\site-packages\qt5_applications\Qt\bin\designer.exe

设计以下UI文件
主窗口UI: sqlManger_ui.ui
新增记录模态框UI: addrowdialog_ui.ui


UI文件转成成Python文件

pyuic5 -x sqlManger_ui.ui -o sqlManger_ui.py

pyuic5 -x addrowdialog_ui.ui -o addrowdialog_ui.py


转换完成后会生成以下文件

新增记录时, 不同的表格数据不同, 因此需要动态加载模态框表单项,
技术点: setattrgetattr 方法的使用

setattr(目标对象, 属性名, 属性值)
getattr(目标对象, 属性名, 属性值)

重构 addrowdialog_ui.py 下的 setupUi retranslateUi 方法, 设置表单项时, 设置成由传入参数动态加载, 文件调整如下

各个功能点信号与槽函数建立链接

# 连接按钮  
self.ui.connbut.clicked.connect(self.conn_database)  
# 查询按钮  
self.ui.querybut.clicked.connect(self.execute_query)  
# 回滚按钮  
self.ui.roolbackbut.clicked.connect(self.rollback_database)  
# 提交按钮  
self.ui.commitbut.clicked.connect(self.commit_database)  
# 切换数据库选择  
self.ui.database.currentIndexChanged.connect(self.change_database)  
# 更改主题  
self.ui.themeComboBox.currentIndexChanged.connect(self.change_theme)  
# 右键表格, 展示菜单  
self.ui.tableView.setContextMenuPolicy(Qt.CustomContextMenu)  
self.ui.tableView.customContextMenuRequested.connect(self.display_table_menu)

mysql数据库的使用

下载mysql相关依赖

 pip3 install mysql-connector-python

因为涉及到事务的回滚, 所以当前应用获取的数据库链接为单例, 代码如下

@staticmethod  
def get_connection(self):  
    if Utils.connection is not None:  
        return Utils.connection  
    Utils.connection = pymysql.connect(  
        # 数据库主机名  
        host=self.ui.host.text(),  
        # 数据库端口号,默认为3306  
        port=int(self.ui.port.text()),  
        # 数据库用户名  
        user=self.ui.username.text(),  
        # 数据库密码  
        passwd=self.ui.pwd.text(),  
        # 字符编码  
        charset='utf8'  
    )  
    return Utils.connection

@staticmethod  
def get_cursor():  
    if Utils.cursor is not None:  
        return Utils.cursor  
    else:  
        if Utils.connection is None:  
            Utils.connection = Utils.get_connection()  
            Utils.cursor = Utils.connection.cursor()  
            return Utils.cursor  
        else:  
            Utils.cursor = Utils.connection.cursor()  
            return Utils.cursor

事务的开启
开启时机: 与数据库建立链接之后

# 开启事务  
cursor.execute("BEGIN")

事务的提交
提交时机: 点击提交按钮

Utils.get_connection(self).commit()

事务的回滚
回滚时机

Utils.get_connection(self).rollback()

增加美化包

原本的QT样式不怎么好看, 集成一下美化包

pip3 install qdarkstyle -i https://pypi.tuna.tsinghua.edu.cn/simple

安装插件时, 不能使用豆瓣源, 豆瓣源没有这个依赖

main.py 入口文件给实例设置浅色样式

app.setStyleSheet(qdarkstyle.load_stylesheet(qt_api='pyqt5', palette=LightPalette()))

切换主题样式的实现

监控下拉框数据改变的信号, 链接对应的槽函数

# 为主题切换的信号和槽函数简历链接
self.ui.themeComboBox.currentIndexChanged.connect(self.change_theme)

切换主题的方法实现, 与启动项目时需要添加一步获取应用实例的操作Utils.get_app_self()

def change_theme(self):  
    if self.ui.themeComboBox.currentText() == "Dark":  
        Utils.get_app_self().setStyleSheet(qdarkstyle.load_stylesheet(qt_api='pyqt5', palette=DarkPalette()))  
    else:  
        Utils.get_app_self().setStyleSheet(qdarkstyle.load_stylesheet(qt_api='pyqt5', palette=LightPalette()))

qt-material 有更丰富的样式

pip install qt-material

应用样式

# 动态加载qt-material主题  
import site  
# venv/Lib/site-packages/qt_material/themes 读取该路径下的文件名  
site_packages_path = site.getsitepackages()[1]  
  
  
# self.ui.themeComboBox.addItems("")


#  venv/Lib/site-packages/qt_material/themes 读取该路径下的文件名
apply_stylesheet(app, theme='light_blue_500.xml')

新增窗口增加滚动条

参考资料Qt designer + ScrollArea 实现滚动界面_qt designer scrollarea-CSDN博客

虚拟环境venv同步

参考资料: python 项目自动生成环境配置文件requirements.txt_如何生成requirements.txt-CSDN博客

生成requirements.txt文件

 pip freeze > requirements.txt

安装依赖,根据requirements.txt

pip install -r requirements.txt

异常问题记录

QSqlDatabase无法加载MYSQL驱动(未解决)

问题现象

QSqlDatabase 无法链接MYSQL数据库, 提示无法加载驱动问题

参考资料:

PyQt5使用QSqlDatabase类连接Mysql的坑

问题原因:

最新版本的QT缺失MYSQL驱动的相关文件

解决方案

根据以上的参考文章操作后问题也没有解决, 最后该问题选择通过pymysql链接数据库, 获取数据, 使用标准的modle来展示

获取MYSQL数据库链接报加密异常(已解决)

问题现象

链接MYSQL在密码, 端口等信息均正确的情况下, 报如下异常

参考资料

RuntimeError: ‘cryptography‘ package is required for sha256_password or caching_sha2_password auth m-CSDN博客

运行项目

项目基础环境

已安装Python3, 可使用以下版本查看python版本

python -V

已安装MySql8.0及以上版本

mysql --help

拉取项目

首先从GITHUB拉取项目, GIT命令行或者下图方式均可
项目地址: https://github.com/lei-ctyh/sqlManger.git

配置项目解释器

按照自己需求配置项目解释器即可
ctrl + alt + s 进入设置 , 具体操作如下图

安装依赖

安装依赖,根据requirements.txt

pip install -r requirements.txt

启动项目

效果展示

标签:SqlManger,self,cursor,connection,开发,ui,install,文档,Utils
From: https://www.cnblogs.com/aaalei/p/17911348.html

相关文章

  • Python 提取 Word 文档中的文本和图片
    将内容从Word文档中提取出来可以方便我们对其进行其他操作,如将内容储存在数据库中、将内容导入到其他程序中、用于AI训练以及制作其他文档等。第三方库 Spire.DocforPython 提供了一个简单的方法直接提取Word文档中的内容,包括文本和图片,而不需要大量的复制粘贴操作,也不......
  • Java Spring Boot 集成 Swagger 生成 API文档(SpringDoc)
    在我们进行项目开发的时候,有些文档是必不可少的,或者也有利于自己查阅,比如API接口文档。在SpringBoot中通常有有个选择:springfoxspringdoc因为springfox和SpringBoot版本适配问题是个坑,这里我们选用更加友好的springDoc,而且用起来更顺手,很丝滑。以下是环境:Spring......
  • (亲测)云原生之使用Docker部署Teedy轻量级文档管理系统
    一、Teedy介绍1.1Teedy简介Teedy是一个开源的、功能丰富、易于使用和自定义的文档管理工具,它能够帮助用户管理和组织文档,适用于个人、小组和组织使用。1.2Teedy特点创建和编辑文档:用户可以使用Markdown格式创建和编辑文档,还可以添加标签和注释。文件上传和管理:用户可以上传和管理......
  • 程序员看过来,鸿蒙开发月薪6万,羡慕吗?
    最近有一些朋友问现在该不该学习鸿蒙系统,如果不学是不是会落伍了啊?今天跟大家说说我的看法!学习鸿蒙的目的首先我们来想想学习的目的吧!可能每个人学习一种东西的目的是不同,有的人是希望更有竞争力,可以拿到更高的薪资;有的人可能只是想为开源做点贡献;或者只是想学习一下别人的代码。所......
  • Windows 应用程序开发
    实验三Windows应用程序开发一、实验目的掌握窗口控件的使用方法;掌握Windows的编程基础。二、实验要求根据要求,编写C#程序,并将程序代码和运行结果写入实验报告。三、实验内容1.编写一个计算器,练习在窗体上添加控件、调整控件的布局,设置或修改控件属性,编写事件处理程序......
  • 数据库迁移方式和相关文档地址
    数据库迁移方式1、phpyiimigrate文档地址2、flyway文档地址3、liqiubase操作文档更多的其他迁移工具探索方式flywayalternatives迁移比较liqiubase操作(1)、在Java中的项目中使用1、在yml中配置相关的扫描springliquibase:change-log:classpath:db/c......
  • 使用React+SpringBoot开发一个协同编辑的表格文档
    前言随着云计算和团队协作的兴起,协同编辑成为了许多企业和组织中必不可少的需求。通过协同编辑,多个用户可以同时对同一个文档进行编辑和更新,从而提高工作效率和协作能力。本文小编就将为大家介绍如何使用React+SpringBoot简单的开发一个协同编辑的表格文档。环境准备用到的开发......
  • 文档建立二级索引
    为文章文档建立索引的步骤:选择存储方式:首先需要选择一个合适的数据存储方式。MySQL和HBase都是流行的数据存储方案,MySQL是关系型数据库,而HBase是结构化数据的非关系型数据库。建立存储架构:根据需要存储的数据类型和查询需求建立数据存储架构。在MySQL中可以使用表、字段、索引等结......
  • 从0到1:志愿者小程序开发心得
    背景调研志愿者服务小程序可以使志愿服务更加有序和高效,方便志愿者参与,也方便组织方管理和组织志愿服务活动;志愿者可以方便的在手机上报名,查看记录,获取积分,了解积分排行;同时提供积分商城模块,可以让志愿者使用通过参与活动所获得的积分来兑换各种奖励或福利.功能规划【用户端】活......
  • mybatis 注解开发
    注解开发<mappers><!--直接读取映射文件--><!--<mapperresource="kong/UserMapper.xml"/>--><!--获取dao文件xml文件存放的路径和dao接口的包名要对应--><packagename="com.kong.dao"/>......