Loading

SqlManger开发文档

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

开发记录

创建项目

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

assets/SqlManger开发文档/image-20231212174014517.png

安装必要依赖

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

# 提供了与 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

安装依赖方式参考下图
assets/SqlManger开发文档/image-20231212175153752.png

设计 UI

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

assets/SqlManger开发文档/image-20231212175609378.png

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

assets/SqlManger开发文档/image-20231215150125976.png
assets/SqlManger开发文档/image-20231215150325964.png

UI 文件转成成 Python 文件

pyuic5 -x sqlManger_ui.ui -o sqlManger_ui.py

pyuic5 -x addrowdialog_ui.ui -o addrowdialog_ui.py

assets/SqlManger开发文档/image-20231213113642881.png
assets/SqlManger开发文档/image-20231215150646257.png

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

assets/SqlManger开发文档/image-20231215150806994.png

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

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

重构 addrowdialog_ui.py 下的 setupUi retranslateUi 方法, 设置表单项时, 设置成由传入参数动态加载, 文件调整如下
assets/SqlManger开发文档/image-20231215153026800.png

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

# 连接按钮
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()))

切换主题样式的实现

assets/SqlManger开发文档/image-20231215163133407.png

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

# 为主题切换的信号和槽函数简历链接
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 博客

assets/SqlManger开发文档/image-20231215235502027.png

虚拟环境 venv 同步

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

生成 requirements.txt 文件

 pip freeze > requirements.txt

安装依赖,根据 requirements.txt

pip install -r requirements.txt

异常问题记录

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

问题现象

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

assets/SqlManger开发文档/image-20231213155858030.png

参考资料:

PyQt5 使用 QSqlDatabase 类连接 Mysql 的坑

问题原因:

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

解决方案

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

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

问题现象

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

assets/SqlManger开发文档/image-20231214101243230.png

参考资料

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

运行项目

项目基础环境

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

python -V

assets/SqlManger开发文档/image-20231213222735318.png

已安装 MySql8.0 及以上版本

mysql --help

assets/SqlManger开发文档/image-20231213215913574.png

拉取项目

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

assets/SqlManger开发文档/image-20231213215158278.png

配置项目解释器

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

assets/SqlManger开发文档/image-20231213220223107.png

assets/SqlManger开发文档/image-20231213220436985.png

安装依赖

安装依赖,根据 requirements.txt

pip install -r requirements.txt

启动项目

assets/SqlManger开发文档/image-20231213222023427.png

效果展示

assets/SqlManger开发文档/image-20231215170946953.png

posted @ 2023-12-18 15:28  张Blog  阅读(61)  评论(0)    收藏  举报