PyQt5连接MySQL数据库(教程+案例)

在PyQt5中其实连接MySQL数据库的方法还是很多的,写法方法都不太一样,本篇文章将教给大家如何使用pymysql进行连接,本节课将通过实际案例让大家学习了解如何对数据库进行增删改查!我个人认为:我一步一步教你怎么用,不如教你如何实战,用实战来学习理论会比为了实践而学习理论更透彻!

PyQt5连接MySQL数据库(教程+案例)_第1张图片

MySQL 数据库

我使用的Navicat Premium 对数据库进行操作,windows有免费的破解版(还挺好的也挺稳定的),Mac建议买正版吧...要不然老闪退(别问我咋知道的。。。哭死)

PyQt5连接MySQL数据库(教程+案例)_第2张图片

这是我的设计的表,我会把数据库的表放在最后,有需要的朋友直接cv 

我这里MySQL是8.0.28的版本进行演示!

PyQt5连接MySQL数据库(教程+案例)_第3张图片

c0614b1ec8294cccafbc3bc82c8722ba.png

MySQL 是一个关系型数据库管理系统,支持常见的数据库操作,包括增加(INSERT)、删除(DELETE)、修改(UPDATE)和查询(SELECT)。下面是这些操作的简要说明:

  1. 增加数据 (INSERT):

    • 使用 INSERT INTO 语句向表中添加新的行。
    • 语法示例:INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
    • 示例:INSERT INTO students (id, name, age) VALUES (1, 'John', 25);
  2. 删除数据 (DELETE):

    • 使用 DELETE FROM 语句删除表中的行。
    • 语法示例:DELETE FROM table_name WHERE condition;
    • 示例:DELETE FROM students WHERE id = 1;
  3. 修改数据 (UPDATE):

    • 使用 UPDATE 语句修改表中的数据。
    • 语法示例:UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
    • 示例:UPDATE students SET age = 26 WHERE id = 1;
  4. 查询数据 (SELECT):

    • 使用 SELECT 语句从表中检索数据。

    • 语法示例:SELECT column1, column2, ... FROM table_name WHERE condition;

    • 示例:SELECT name, age FROM students WHERE id = 1;

    • 查询所有数据:SELECT * FROM table_name;

    • 使用 ORDER BY 对结果排序:SELECT * FROM students ORDER BY age DESC;

    • 使用 LIMIT 限制结果集的数量:SELECT * FROM students LIMIT 10;

    • 使用 JOIN 连接多个表:SELECT orders.id, customers.name FROM orders JOIN customers ON orders.customer_id = customers.id;

 PyQt5程序详解

程序分为两部分:ConnectSql.py(界面)ConnectSqlLogic.py(逻辑)

界面还是使用Qt Designer进行的排版,导出的ui文件(不会转换py的朋友看我上一篇文章,里面有讲)完整代码放在文章最后,需要的直接拿吧。

ConnectSqlLogic.py(逻辑) 

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        # 定义表名
        self.table_name = 'your_table'  # 替换为你的表名

        # 设置数据库连接
        self.connection = pymysql.connect(
            host='localhost',  # 你的 MySQL 服务器主机名
            user='your_username',  # 你的数据库用户名
            password='your_password',  # 你的数据库密码
            database='your_database',  # 你的数据库名
            charset='utf8mb4',
            cursorclass=pymysql.cursors.DictCursor
        )
        # 初始化表格视图
        self.init_table_view()
  1. 初始化函数 (__init__):

    • super(MainWindow, self).__init__() 调用父类的初始化函数,确保正确地初始化 QMainWindowUi_MainWindow

    • self.setupUi(self) 调用 setupUi 方法,负责设置 UI 的布局和组件。

    • self.table_name = 'your_table' 定义一个变量 table_name,表示数据库中的表名。你需要将 'your_table' 替换为实际的表名。

    • self.connection 创建一个 MySQL 数据库连接对象。这里使用了 pymysql 模块来连接数据库。你需要根据实际情况替换以下参数:

      • host: 你的 MySQL 服务器主机名。
      • user: 你的数据库用户名。
      • password: 你的数据库密码。
      • database: 你的数据库名。
      • charset: 数据库字符集,这里使用了 UTF-8。
      • cursorclass: 游标的类别,这里使用了 DictCursor,表示返回的查询结果以字典的形式表示每一行的数据。
    • self.init_table_view() 调用 init_table_view 方法,初始化表格视图。

  2. 数据库连接

    这里使用了 pymysql.connect 方法来创建数据库连接对象,以便在应用程序运行期间与 MySQL 数据库进行交互。
  3. 表格视图初始化

    self.init_table_view() 调用 init_table_view 方法,该方法负责初始化表格视图,可能包括设置表格列数、行数、列宽、行高等,并执行查询以获取数据并在表格中显示。
# 连接按钮点击事件
  self.insert_btn.clicked.connect(self.insert_data)
  self.del_btn.clicked.connect(self.delete_data)
  self.select_btn.clicked.connect(self.select_data)
  self.update_btn.clicked.connect(self.update_data)

将按钮的点击触发和对应函数进行绑定,当按钮触发时运行对应方法函数

 # 清除输入框内容
    def clearinput(self):
        self.name_edit.clear()
        self.username_edit.clear()
        self.password_edit.clear()

这里单独写了个方法用来清除输入框,因为有很多地方会用到三个输入框的清除,每次用每次写太麻烦了,干脆单独写一个吧!

    def init_table_view(self):
        try:
            # 检查连接是否存在,断开的话重连
            self.connection.ping(reconnect=True)
            # 执行查询
            with self.connection.cursor() as cursor:
                sql_query = f"SELECT name, username, password FROM {self.table_name}"
                cursor.execute(sql_query)
                results = cursor.fetchall()

                if len(results) == 0:
                    self.data_table.setRowCount(0)
                    QMessageBox.information(self, "提示", "没有符合条件的记录", QMessageBox.Ok)
                else:
                    self.data_table.setRowCount(len(results))
                    self.data_table.setColumnCount(3)

                    for index, result in enumerate(results):
                        name_item = QTableWidgetItem()
                        name_item.setText(str(result['name']))

                        username_item = QTableWidgetItem()
                        username_item.setText(str(result['username']))

                        password_item = QTableWidgetItem()
                        password_item.setText(str(result['password']))

                        self.data_table.setItem(index, 0, name_item)
                        self.data_table.setItem(index, 1, username_item)
                        self.data_table.setItem(index, 2, password_item)

                    # 设置表头
                    self.data_table.setHorizontalHeaderLabels(['姓名', '账号', '密码'])
                    self.result_label.setText("数据加载成功!")

        except Exception as e:
            print(e)
            self.result_label.setText("运行错误!")

这段代码主要是将从 MySQL 数据库中查询到的结果显示在 PyQt5 界面的表格中,同时对异常进行了处理,以确保程序在出现错误时能够提供适当的反馈。在 init_table_view 函数中,你需要确保 self.connectionself.data_table 这两个对象已经正确初始化。

  1. 检查连接是否存在,断开的话重连

    self.connection.ping(reconnect=True) 语句用于检查数据库连接是否存在,如果存在则重新连接。这是为了确保在执行查询之前数据库连接是可用的。
  2. 执行查询

    • with self.connection.cursor() as cursor: 创建了一个数据库游标,然后在这个 with 语句块中执行查询操作。
    • sql_query = f"SELECT name, username, password FROM {self.table_name}" 构建了一个 SQL 查询语句,其中 {self.table_name} 是一个占位符,应该替换为实际的表名。
    • cursor.execute(sql_query) 执行 SQL 查询。
  3. 获取查询结果

    results = cursor.fetchall() 获取查询结果。这将返回一个包含所有查询行的元组列表。
  4. 处理查询结果

    • if len(results) == 0: 检查结果是否为空,如果为空则显示一个提示消息。
    • else: 如果结果不为空,就设置表格的行数和列数,然后遍历结果并将每个值添加到表格中。
    • self.data_table.setItem(index, column, item) 将查询结果的每个字段值设置到表格的相应位置。
  5. 设置表头

    self.data_table.setHorizontalHeaderLabels(['姓名', '账号', '密码']) 设置表格的列头标签。
  6. 显示结果信息

    self.result_label.setText("数据加载成功!") 如果查询成功,就设置标签显示成功信息;否则,显示运行错误信息。
    def execute_query(self, sql_query):
        with self.connection.cursor() as cursor:
            cursor.execute(sql_query)
            return cursor.fetchall()

这是一个用于执行 SQL 查询语句的函数,函数名为 execute_query

  1. 参数

    sql_query 是传递给函数的 SQL 查询语句。
  2. 执行查询

    with self.connection.cursor() as cursor: 创建了一个数据库游标,该游标在 with 语句块中生效。cursor.execute(sql_query) 执行传入的 SQL 查询语句。
  3. 获取查询结果

    cursor.fetchall() 获取查询结果,这个结果以元组列表的形式返回。
  4. 返回结果

    return cursor.fetchall() 将查询结果作为函数的返回值。这意味着调用这个函数时,你可以得到执行查询后的结果。

这个函数允许你传入任意的 SQL 查询语句,执行查询,并返回结果。

    def insert_data(self):
        # 获取输入框的值
        name = self.name_edit.text()
        username = self.username_edit.text()
        password = self.password_edit.text()
        # 插入数据
        sql_query = f"INSERT INTO {self.table_name} (name, username, password) VALUES ('{name}', '{username}', '{password}')"
        self.execute_query(sql_query)
        self.connection.commit()
        self.init_table_view()
        self.clearinput()
        self.result_label.setText("新增数据成功!")
  1. 获取输入框的值

    • name = self.name_edit.text() 获取名字输入框的文本内容。
    • username = self.username_edit.text() 获取用户名输入框的文本内容。
    • password = self.password_edit.text() 获取密码输入框的文本内容。
  2. 构建插入数据的 SQL 查询语句

    sql_query = f"INSERT INTO {self.table_name} (name, username, password) VALUES ('{name}', '{username}', '{password}')" 构建了一个 SQL 查询语句,用于向数据库插入新的数据。这里使用了格式化字符串,将获取的输入框值插入到 SQL 语句中。
  3. 执行插入操作

    self.execute_query(sql_query) 调用先前解释的 execute_query 方法执行插入操作。
  4. 提交事务

    self.connection.commit() 提交了对数据库的修改,将插入操作确切地应用到数据库中。
  5. 更新表格视图

    self.init_table_view() 调用 init_table_view 方法,刷新表格视图以显示最新的数据。
  6. 清空输入框内容

    self.clearinput() 调用 clearinput 方法,清空输入框的内容,以便用户输入下一组数据。
  7. 设置结果标签

    self.result_label.setText("新增数据成功!") 设置界面上的标签,提示用户插入数据成功。

这个方法允许用户通过界面输入框输入新的数据,然后将这些数据插入到 MySQL 数据库中,并刷新界面上的表格视图以显示最新的数据。

    def delete_data(self):
        username = self.username_edit.text()
        # 删除数据
        sql_query = f"DELETE FROM {self.table_name} WHERE username = {username}"
        self.execute_query(sql_query)
        self.connection.commit()
        self.init_table_view()
        self.result_label.setText("删除数据成功!")

这个方法允许用户通过界面输入框输入要删除的用户名,然后从 MySQL 数据库中删除相应的数据。随后,它刷新界面上的表格视图以显示最新的数据,并提供用户删除数据成功的反馈。需要注意的是,这里的 SQL 查询语句中的 username 是字符串,所以在 SQL 语句中需要使用单引号将其括起来。

  1. 获取用户名输入框的值

    username = self.username_edit.text() 获取用户名输入框的文本内容。
  2. 构建删除数据的 SQL 查询语句

    sql_query = f"DELETE FROM {self.table_name} WHERE username = {username}" 构建了一个 SQL 查询语句,用于从数据库中删除指定用户名的数据。这里使用了格式化字符串,将获取的用户名插入到 SQL 语句中。
  3. 执行删除操作

    self.execute_query(sql_query) 调用先前解释的 execute_query 方法执行删除操作。
  4. 提交事务

    self.connection.commit() 提交了对数据库的修改,将删除操作确切地应用到数据库中。
  5. 更新表格视图

    self.init_table_view() 调用 init_table_view 方法,刷新表格视图以显示最新的数据。
  6. 设置结果标签

    self.result_label.setText("删除数据成功!") 设置界面上的标签,提示用户删除数据成功。
    def select_data(self):
        username = self.username_edit.text()
        try:
            # 检查连接是否存在,断开的话重连
            self.connection.ping(reconnect=True)
            if username=='':
                self.init_table_view()
                self.result_label.setText("请输入账号查询!")
                return
            # 执行查询
            with self.connection.cursor() as cursor:
                sql_query = f"SELECT name, username, password FROM {self.table_name} WHERE username={username}"
                cursor.execute(sql_query)
                results = cursor.fetchall()

                if len(results) == 0:
                    self.init_table_view()
                    QMessageBox.information(self, "提示", "没有符合条件的记录", QMessageBox.Ok)
                else:
                    self.data_table.clear()
                    self.data_table.setRowCount(len(results))
                    self.data_table.setColumnCount(3)

                    for index, result in enumerate(results):
                        name_item = QTableWidgetItem()
                        name_item.setText(str(result['name']))

                        username_item = QTableWidgetItem()
                        username_item.setText(str(result['username']))

                        password_item = QTableWidgetItem()
                        password_item.setText(str(result['password']))

                        self.data_table.setItem(index, 0, name_item)
                        self.data_table.setItem(index, 1, username_item)
                        self.data_table.setItem(index, 2, password_item)

                    # 设置表头
                    self.data_table.setHorizontalHeaderLabels(['姓名', '账号', '密码'])
                    self.result_label.setText("数据加载成功!")

        except Exception as e:
            print(e)
            self.result_label.setText("运行错误!")
  1. 获取用户名输入框的值

    username = self.username_edit.text() 获取用户名输入框的文本内容。
  2. 检查用户名是否为空

    if username=='': 如果用户名为空,就初始化表格视图、设置结果标签,然后直接返回,不执行查询操作。
  3. 检查数据库连接

    self.connection.ping(reconnect=True) 检查数据库连接是否存在,如果存在则重新连接。
  4. 执行查询

    • with self.connection.cursor() as cursor: 创建数据库游标,然后在 with 语句块中执行查询操作。
    • sql_query = f"SELECT name, username, password FROM {self.table_name} WHERE username={username}" 构建了一个 SQL 查询语句,用于从数据库中查询指定用户名的数据。这里使用了格式化字符串,将获取的用户名插入到 SQL 语句中。
    • cursor.execute(sql_query) 执行 SQL 查询。
  5. 获取查询结果

    results = cursor.fetchall() 获取查询结果,这个结果以元组列表的形式返回。
  6. 处理查询结果

    ​​​​​​​如果查询结果为空,初始化表格视图并显示提示消息;否则,清空表格,设置新的行数和列数,然后遍历结果并将每个值添加到表格中。
  7. 设置表头和结果标签

    • self.data_table.setHorizontalHeaderLabels(['姓名', '账号', '密码']) 设置表格的列头标签。
    • self.result_label.setText("数据加载成功!") 设置界面上的标签,提示用户数据加载成功。
  8. 异常处理

    except Exception as e: 捕获任何可能发生的异常,并在控制台打印错误信息,同时设置结果标签以提供用户错误信息。

这个方法允许用户通过界面输入框输入要查询的用户名,然后从 MySQL 数据库中查询相应的数据。随后,它根据查询结果刷新界面上的表格视图以显示最新的数据,并提供用户查询数据成功或失败的反馈。需要注意的是,在 SQL 查询语句中的 username 是字符串,所以在 SQL 语句中需要使用单引号将其括起来。

    def update_data(self):
        # 获取修改后的值
        new_name = self.name_edit.text()
        username = self.username_edit.text()
        new_password = self.password_edit.text()
        # 更新数据
        sql_query = f"UPDATE {self.table_name} SET name='{new_name}', password='{new_password}' WHERE username='{username}'"
        self.execute_query(sql_query)
        self.connection.commit()
        self.init_table_view()
        self.clearinput()
        self.result_label.setText("修改数据成功!")
  1. 获取修改后的值

    • new_name = self.name_edit.text() 获取名字输入框中修改后的文本内容。
    • username = self.username_edit.text() 获取用户名输入框的文本内容。
    • new_password = self.password_edit.text() 获取密码输入框中修改后的文本内容。
  2. 构建更新数据的 SQL 查询语句

    sql_query = f"UPDATE {self.table_name} SET name='{new_name}', password='{new_password}' WHERE username='{username}'" 构建了一个 SQL 查询语句,用于更新数据库中指定用户名的数据。这里使用了格式化字符串,将获取的修改后的值和用户名插入到 SQL 语句中。
  3. 执行更新操作

    self.execute_query(sql_query) 调用先前解释的 execute_query 方法执行更新操作。
  4. 提交事务

    self.connection.commit() 提交了对数据库的修改,将更新操作确切地应用到数据库中。
  5. 更新表格视图

    self.init_table_view() 调用 init_table_view 方法,刷新表格视图以显示最新的数据。
  6. 清空输入框内容

    self.clearinput() 调用 clearinput 方法,清空输入框的内容,以便用户输入下一组数据。
  7. 设置结果标签

    self.result_label.setText("修改数据成功!") 设置界面上的标签,提示用户修改数据成功。

这个方法允许用户通过界面输入框输入要修改的数据,然后将这些数据更新到 MySQL 数据库中,并刷新界面上的表格视图以显示最新的数据。需要注意的是,在 SQL 查询语句中的 new_namenew_password 是字符串,所以在 SQL 语句中需要使用单引号将其括起来。

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
  1. 应用程序初始化

    app = QApplication(sys.argv) 创建一个 QApplication 对象,表示应用程序的实例。sys.argv 是用于从命令行接收参数的列表,但在这个例子中一般用不到。
  2. 主窗口初始化

    window = MainWindow() 创建一个 MainWindow 对象,即主窗口的实例。这个对象是你设计的界面的主窗口。
  3. 显示主窗口

    window.show() 调用 show 方法,显示主窗口。这使得主窗口界面出现在屏幕上。
  4. 应用程序执行

    sys.exit(app.exec_()) 开始执行应用程序的主事件循环。app.exec_() 启动了 Qt 的事件循环,使得应用程序保持运行状态,等待用户的输入和操作。
  5. 退出应用程序

    当用户关闭应用程序窗口时,app.exec_() 返回一个退出码,然后 sys.exit() 被调用,结束应用程序的执行。

完整代码

使用代码时记得把设置数据库连接的地方换成你自己的账号密码等,记得把表名改了,要不然会报错的,都改为你自己的!代码可以直接运行,我已经测试过了

import pymysql
from ConnectSql import Ui_MainWindow
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QTableWidgetItem, QMessageBox

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        # 定义表名
        self.table_name = 'your_table'  # 替换为你的表名

        # 设置数据库连接
        self.connection = pymysql.connect(
            host='localhost',  # 你的 MySQL 服务器主机名
            user='your_username',  # 你的数据库用户名
            password='your_password',  # 你的数据库密码
            database='your_database',  # 你的数据库名
            charset='utf8mb4',
            cursorclass=pymysql.cursors.DictCursor
        )

        # 初始化表格视图
        self.init_table_view()


        # 连接按钮点击事件
        self.insert_btn.clicked.connect(self.insert_data)
        self.del_btn.clicked.connect(self.delete_data)
        self.select_btn.clicked.connect(self.select_data)
        self.update_btn.clicked.connect(self.update_data)
    # 清除输入框内容
    def clearinput(self):
        self.name_edit.clear()
        self.username_edit.clear()
        self.password_edit.clear()

    def init_table_view(self):
        try:
            # 检查连接是否存在,断开的话重连
            self.connection.ping(reconnect=True)
            # 执行查询
            with self.connection.cursor() as cursor:
                sql_query = f"SELECT name, username, password FROM {self.table_name}"
                cursor.execute(sql_query)
                results = cursor.fetchall()

                if len(results) == 0:
                    self.data_table.setRowCount(0)
                    QMessageBox.information(self, "提示", "没有符合条件的记录", QMessageBox.Ok)
                else:
                    self.data_table.setRowCount(len(results))
                    self.data_table.setColumnCount(3)

                    for index, result in enumerate(results):
                        name_item = QTableWidgetItem()
                        name_item.setText(str(result['name']))

                        username_item = QTableWidgetItem()
                        username_item.setText(str(result['username']))

                        password_item = QTableWidgetItem()
                        password_item.setText(str(result['password']))

                        self.data_table.setItem(index, 0, name_item)
                        self.data_table.setItem(index, 1, username_item)
                        self.data_table.setItem(index, 2, password_item)

                    # 设置表头
                    self.data_table.setHorizontalHeaderLabels(['姓名', '账号', '密码'])
                    self.result_label.setText("数据加载成功!")

        except Exception as e:
            print(e)
            self.result_label.setText("运行错误!")

    def execute_query(self, sql_query):
        with self.connection.cursor() as cursor:
            cursor.execute(sql_query)
            return cursor.fetchall()

    def insert_data(self):
        # 获取输入框的值
        name = self.name_edit.text()
        username = self.username_edit.text()
        password = self.password_edit.text()
        # 插入数据
        sql_query = f"INSERT INTO {self.table_name} (name, username, password) VALUES ('{name}', '{username}', '{password}')"
        self.execute_query(sql_query)
        self.connection.commit()
        self.init_table_view()
        self.clearinput()
        self.result_label.setText("新增数据成功!")

    def delete_data(self):
        username = self.username_edit.text()
        # 删除数据
        sql_query = f"DELETE FROM {self.table_name} WHERE username = {username}"
        self.execute_query(sql_query)
        self.connection.commit()
        self.init_table_view()
        self.result_label.setText("删除数据成功!")

    def select_data(self):
        username = self.username_edit.text()
        try:
            # 检查连接是否存在,断开的话重连
            self.connection.ping(reconnect=True)
            if username=='':
                self.init_table_view()
                self.result_label.setText("请输入账号查询!")
                return
            # 执行查询
            with self.connection.cursor() as cursor:
                sql_query = f"SELECT name, username, password FROM {self.table_name} WHERE username={username}"
                cursor.execute(sql_query)
                results = cursor.fetchall()

                if len(results) == 0:
                    self.init_table_view()
                    QMessageBox.information(self, "提示", "没有符合条件的记录", QMessageBox.Ok)
                else:
                    self.data_table.clear()
                    self.data_table.setRowCount(len(results))
                    self.data_table.setColumnCount(3)

                    for index, result in enumerate(results):
                        name_item = QTableWidgetItem()
                        name_item.setText(str(result['name']))

                        username_item = QTableWidgetItem()
                        username_item.setText(str(result['username']))

                        password_item = QTableWidgetItem()
                        password_item.setText(str(result['password']))

                        self.data_table.setItem(index, 0, name_item)
                        self.data_table.setItem(index, 1, username_item)
                        self.data_table.setItem(index, 2, password_item)

                    # 设置表头
                    self.data_table.setHorizontalHeaderLabels(['姓名', '账号', '密码'])
                    self.result_label.setText("数据加载成功!")

        except Exception as e:
            print(e)
            self.result_label.setText("运行错误!")

    def update_data(self):
        # 获取修改后的值
        new_name = self.name_edit.text()
        username = self.username_edit.text()
        new_password = self.password_edit.text()
        # 更新数据
        sql_query = f"UPDATE {self.table_name} SET name='{new_name}', password='{new_password}' WHERE username='{username}'"
        self.execute_query(sql_query)
        self.connection.commit()
        self.init_table_view()
        self.clearinput()
        self.result_label.setText("修改数据成功!")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
from PyQt5 import QtWidgets, QtCore, QtGui


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(714, 302)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.name_edit = QtWidgets.QLineEdit(self.centralwidget)
        self.name_edit.setGeometry(QtCore.QRect(110, 80, 131, 31))
        self.name_edit.setObjectName("name_edit")
        self.username_edit = QtWidgets.QLineEdit(self.centralwidget)
        self.username_edit.setGeometry(QtCore.QRect(110, 120, 131, 31))
        self.username_edit.setObjectName("username_edit")
        self.username_label = QtWidgets.QLabel(self.centralwidget)
        self.username_label.setGeometry(QtCore.QRect(80, 130, 60, 16))
        self.username_label.setObjectName("username_label")
        self.name_labe = QtWidgets.QLabel(self.centralwidget)
        self.name_labe.setGeometry(QtCore.QRect(80, 90, 60, 16))
        self.name_labe.setObjectName("name_labe")
        self.insert_btn = QtWidgets.QPushButton(self.centralwidget)
        self.insert_btn.setGeometry(QtCore.QRect(70, 210, 111, 41))
        self.insert_btn.setObjectName("insert_btn")
        self.del_btn = QtWidgets.QPushButton(self.centralwidget)
        self.del_btn.setGeometry(QtCore.QRect(180, 210, 111, 41))
        self.del_btn.setObjectName("del_btn")
        self.password_label = QtWidgets.QLabel(self.centralwidget)
        self.password_label.setGeometry(QtCore.QRect(80, 170, 60, 16))
        self.password_label.setObjectName("password_label")
        self.password_edit = QtWidgets.QLineEdit(self.centralwidget)
        self.password_edit.setGeometry(QtCore.QRect(110, 160, 131, 31))
        self.password_edit.setObjectName("password_edit")
        self.select_btn = QtWidgets.QPushButton(self.centralwidget)
        self.select_btn.setGeometry(QtCore.QRect(405, 210, 113, 41))
        self.select_btn.setObjectName("select_btn")
        self.update_btn = QtWidgets.QPushButton(self.centralwidget)
        self.update_btn.setGeometry(QtCore.QRect(290, 210, 113, 41))
        self.update_btn.setObjectName("update_btn")
        self.data_table = QtWidgets.QTableWidget(self.centralwidget)
        self.data_table.setGeometry(QtCore.QRect(260, 80, 371, 111))
        self.data_table.setObjectName("data_table")
        self.data_table.setColumnCount(3)
        self.title_label = QtWidgets.QLabel(self.centralwidget)
        self.title_label.setGeometry(QtCore.QRect(240, 20, 241, 31))
        font = QtGui.QFont()
        font.setPointSize(24)
        self.title_label.setFont(font)
        self.title_label.setTextFormat(QtCore.Qt.AutoText)
        self.title_label.setObjectName("title_label")
        self.result_label = QtWidgets.QLabel(self.centralwidget)
        self.result_label.setGeometry(QtCore.QRect(550, 220, 100, 16))
        self.result_label.setObjectName("result_labe")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.username_label.setText(_translate("MainWindow", "账号"))
        self.name_labe.setText(_translate("MainWindow", "姓名"))
        self.insert_btn.setText(_translate("MainWindow", "新增数据"))
        self.del_btn.setText(_translate("MainWindow", "删除数据"))
        self.password_label.setText(_translate("MainWindow", "密码"))
        self.select_btn.setText(_translate("MainWindow", "查询数据"))
        self.update_btn.setText(_translate("MainWindow", "修改数据"))
        self.title_label.setText(_translate("MainWindow", "MySql数据库增删改查"))
        self.result_label.setText(_translate("MainWindow", "数据返回提示!"))

这个是数据库的sql文件,里面包含30个测试数据,以及表的结构​​​​​​​ ​​​​​​​


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for py
-- ----------------------------
DROP TABLE IF EXISTS `py`;
CREATE TABLE `py` (
  `name` varchar(32) NOT NULL,
  `username` varchar(32) NOT NULL,
  `password` varchar(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of py
-- ----------------------------
BEGIN;
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('宋云熙', '42852503', 'j0XEAFjGhe');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('郭子异', '65850169', 'cZfZKSur5K');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('萧云熙', '82986682', 'vIPbkqG46a');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('崔子韬', '15959578', 'ZDUs4fISv2');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('黄秀英', '16765807', '7IwW55RFW6');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('马杰宏', '22390686', 'dehCa2pkKI');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('谭杰宏', '01780393', '0Da7M7XKpt');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('傅杰宏', '63344106', 'RdUBUJqaku');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('叶秀英', '93079587', 'nhdtVDVBJf');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('汪杰宏', '58124611', '2CBq9Osyc3');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('武宇宁', '30067171', 'Xf1VzaY4rU');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('萧子韬', '30257708', 'anGe3t8s24');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('范震南', '89349269', '3Mw47dOrGR');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('戴秀英', '00413308', 'M6ykmMB4fe');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('叶岚', '45469274', 'gMx0nzNlYo');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('段子异', '99582800', 'MPtUEfXgiq');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('梁岚', '93527654', 'ARckn0uKld');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('钱岚', '30677789', 'slcDuaEfTA');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('沈璐', '13172293', 'LqlGIU9peZ');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('毛秀英', '42437915', 'tMYpYMt5T2');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('夏璐', '25857784', 'xniT5HUmwo');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('蔡杰宏', '19299346', 'IAOyT2AFNf');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('宋秀英', '03614456', '5Am7JP2Qj3');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('石子异', '06031667', 'JTIYwtD8wR');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('田睿', '61213562', 'lKfNh1bWMb');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('吴璐', '55083345', 'f0mqbEth2k');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('黎子韬', '06528774', 'Rlp3sfhRiW');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('', '', '');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('', '', '');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('', '', '');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('', '', '');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('', '', '');
INSERT INTO `py` (`name`, `username`, `password`) VALUES ('', '', '');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;
PyMySQL==1.0.2
PyQt5==5.15.10
PyQt5_sip==12.13.0

上述是整个程序的模块版本!仅供参考!可能由于电脑环境不同还会有各种问题,欢迎大家在评论区留言讨论!

本期的PyQt的程序案例就分享到这了!后期会更新更多PyQt的程序!感谢支持!有什么想看的程序在评论区留言!

你可能感兴趣的:(PyQt5系列精品专栏,数据库,mysql,python,pyqt)