SqlManger开发文档
开发记录
创建项目
新建 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


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

新增记录时, 不同的表格数据不同, 因此需要动态加载模态框表单项,
技术点:setattr与getattr方法的使用
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 在密码, 端口等信息均正确的情况下, 报如下异常

参考资料
运行项目
项目基础环境
已安装 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
启动项目

效果展示


浙公网安备 33010602011771号