当前位置:   article > 正文

PyQt5连接MySQL数据库(教程+案例)_使用pyqt5连接mysql数据库实现用户管理(增,删,改,查,附代码和完整界面)

使用pyqt5连接mysql数据库实现用户管理(增,删,改,查,附代码和完整界面)

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

2416cac93dc94c7e8e59ee6480b67cea.png

MySQL 数据库

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

526ba83d184e479eab480ed9c352f9b3.png

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

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

a3659f7db4f0453e956c8b0fc9ea3a68.png

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(逻辑) 

  1. class MainWindow(QMainWindow, Ui_MainWindow):
  2. def __init__(self):
  3. super(MainWindow, self).__init__()
  4. self.setupUi(self)
  5. # 定义表名
  6. self.table_name = 'your_table' # 替换为你的表名
  7. # 设置数据库连接
  8. self.connection = pymysql.connect(
  9. host='localhost', # 你的 MySQL 服务器主机名
  10. user='your_username', # 你的数据库用户名
  11. password='your_password', # 你的数据库密码
  12. database='your_database', # 你的数据库名
  13. charset='utf8mb4',
  14. cursorclass=pymysql.cursors.DictCursor
  15. )
  16. # 初始化表格视图
  17. 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 方法,该方法负责初始化表格视图,可能包括设置表格列数、行数、列宽、行高等,并执行查询以获取数据并在表格中显示。
  1. # 连接按钮点击事件
  2. self.insert_btn.clicked.connect(self.insert_data)
  3. self.del_btn.clicked.connect(self.delete_data)
  4. self.select_btn.clicked.connect(self.select_data)
  5. self.update_btn.clicked.connect(self.update_data)

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

  1. # 清除输入框内容
  2. def clearinput(self):
  3. self.name_edit.clear()
  4. self.username_edit.clear()
  5. self.password_edit.clear()

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

  1. def init_table_view(self):
  2. try:
  3. # 检查连接是否存在,断开的话重连
  4. self.connection.ping(reconnect=True)
  5. # 执行查询
  6. with self.connection.cursor() as cursor:
  7. sql_query = f"SELECT name, username, password FROM {self.table_name}"
  8. cursor.execute(sql_query)
  9. results = cursor.fetchall()
  10. if len(results) == 0:
  11. self.data_table.setRowCount(0)
  12. QMessageBox.information(self, "提示", "没有符合条件的记录", QMessageBox.Ok)
  13. else:
  14. self.data_table.setRowCount(len(results))
  15. self.data_table.setColumnCount(3)
  16. for index, result in enumerate(results):
  17. name_item = QTableWidgetItem()
  18. name_item.setText(str(result['name']))
  19. username_item = QTableWidgetItem()
  20. username_item.setText(str(result['username']))
  21. password_item = QTableWidgetItem()
  22. password_item.setText(str(result['password']))
  23. self.data_table.setItem(index, 0, name_item)
  24. self.data_table.setItem(index, 1, username_item)
  25. self.data_table.setItem(index, 2, password_item)
  26. # 设置表头
  27. self.data_table.setHorizontalHeaderLabels(['姓名', '账号', '密码'])
  28. self.result_label.setText("数据加载成功!")
  29. except Exception as e:
  30. print(e)
  31. 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("数据加载成功!") 如果查询成功,就设置标签显示成功信息;否则,显示运行错误信息。
  1. def execute_query(self, sql_query):
  2. with self.connection.cursor() as cursor:
  3. cursor.execute(sql_query)
  4. 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 查询语句,执行查询,并返回结果。

  1. def insert_data(self):
  2. # 获取输入框的值
  3. name = self.name_edit.text()
  4. username = self.username_edit.text()
  5. password = self.password_edit.text()
  6. # 插入数据
  7. sql_query = f"INSERT INTO {self.table_name} (name, username, password) VALUES ('{name}', '{username}', '{password}')"
  8. self.execute_query(sql_query)
  9. self.connection.commit()
  10. self.init_table_view()
  11. self.clearinput()
  12. 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 数据库中,并刷新界面上的表格视图以显示最新的数据。

  1. def delete_data(self):
  2. username = self.username_edit.text()
  3. # 删除数据
  4. sql_query = f"DELETE FROM {self.table_name} WHERE username = {username}"
  5. self.execute_query(sql_query)
  6. self.connection.commit()
  7. self.init_table_view()
  8. 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("删除数据成功!") 设置界面上的标签,提示用户删除数据成功。
  1. def select_data(self):
  2. username = self.username_edit.text()
  3. try:
  4. # 检查连接是否存在,断开的话重连
  5. self.connection.ping(reconnect=True)
  6. if username=='':
  7. self.init_table_view()
  8. self.result_label.setText("请输入账号查询!")
  9. return
  10. # 执行查询
  11. with self.connection.cursor() as cursor:
  12. sql_query = f"SELECT name, username, password FROM {self.table_name} WHERE username={username}"
  13. cursor.execute(sql_query)
  14. results = cursor.fetchall()
  15. if len(results) == 0:
  16. self.init_table_view()
  17. QMessageBox.information(self, "提示", "没有符合条件的记录", QMessageBox.Ok)
  18. else:
  19. self.data_table.clear()
  20. self.data_table.setRowCount(len(results))
  21. self.data_table.setColumnCount(3)
  22. for index, result in enumerate(results):
  23. name_item = QTableWidgetItem()
  24. name_item.setText(str(result['name']))
  25. username_item = QTableWidgetItem()
  26. username_item.setText(str(result['username']))
  27. password_item = QTableWidgetItem()
  28. password_item.setText(str(result['password']))
  29. self.data_table.setItem(index, 0, name_item)
  30. self.data_table.setItem(index, 1, username_item)
  31. self.data_table.setItem(index, 2, password_item)
  32. # 设置表头
  33. self.data_table.setHorizontalHeaderLabels(['姓名', '账号', '密码'])
  34. self.result_label.setText("数据加载成功!")
  35. except Exception as e:
  36. print(e)
  37. 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 语句中需要使用单引号将其括起来。

  1. def update_data(self):
  2. # 获取修改后的值
  3. new_name = self.name_edit.text()
  4. username = self.username_edit.text()
  5. new_password = self.password_edit.text()
  6. # 更新数据
  7. sql_query = f"UPDATE {self.table_name} SET name='{new_name}', password='{new_password}' WHERE username='{username}'"
  8. self.execute_query(sql_query)
  9. self.connection.commit()
  10. self.init_table_view()
  11. self.clearinput()
  12. 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 语句中需要使用单引号将其括起来。

  1. if __name__ == "__main__":
  2. app = QApplication(sys.argv)
  3. window = MainWindow()
  4. window.show()
  5. 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() 被调用,结束应用程序的执行。

完整代码

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

  1. import pymysql
  2. from ConnectSql import Ui_MainWindow
  3. import sys
  4. from PyQt5.QtWidgets import QMainWindow, QApplication, QTableWidgetItem, QMessageBox
  5. class MainWindow(QMainWindow, Ui_MainWindow):
  6. def __init__(self):
  7. super(MainWindow, self).__init__()
  8. self.setupUi(self)
  9. # 定义表名
  10. self.table_name = 'your_table' # 替换为你的表名
  11. # 设置数据库连接
  12. self.connection = pymysql.connect(
  13. host='localhost', # 你的 MySQL 服务器主机名
  14. user='your_username', # 你的数据库用户名
  15. password='your_password', # 你的数据库密码
  16. database='your_database', # 你的数据库名
  17. charset='utf8mb4',
  18. cursorclass=pymysql.cursors.DictCursor
  19. )
  20. # 初始化表格视图
  21. self.init_table_view()
  22. # 连接按钮点击事件
  23. self.insert_btn.clicked.connect(self.insert_data)
  24. self.del_btn.clicked.connect(self.delete_data)
  25. self.select_btn.clicked.connect(self.select_data)
  26. self.update_btn.clicked.connect(self.update_data)
  27. # 清除输入框内容
  28. def clearinput(self):
  29. self.name_edit.clear()
  30. self.username_edit.clear()
  31. self.password_edit.clear()
  32. def init_table_view(self):
  33. try:
  34. # 检查连接是否存在,断开的话重连
  35. self.connection.ping(reconnect=True)
  36. # 执行查询
  37. with self.connection.cursor() as cursor:
  38. sql_query = f"SELECT name, username, password FROM {self.table_name}"
  39. cursor.execute(sql_query)
  40. results = cursor.fetchall()
  41. if len(results) == 0:
  42. self.data_table.setRowCount(0)
  43. QMessageBox.information(self, "提示", "没有符合条件的记录", QMessageBox.Ok)
  44. else:
  45. self.data_table.setRowCount(len(results))
  46. self.data_table.setColumnCount(3)
  47. for index, result in enumerate(results):
  48. name_item = QTableWidgetItem()
  49. name_item.setText(str(result['name']))
  50. username_item = QTableWidgetItem()
  51. username_item.setText(str(result['username']))
  52. password_item = QTableWidgetItem()
  53. password_item.setText(str(result['password']))
  54. self.data_table.setItem(index, 0, name_item)
  55. self.data_table.setItem(index, 1, username_item)
  56. self.data_table.setItem(index, 2, password_item)
  57. # 设置表头
  58. self.data_table.setHorizontalHeaderLabels(['姓名', '账号', '密码'])
  59. self.result_label.setText("数据加载成功!")
  60. except Exception as e:
  61. print(e)
  62. self.result_label.setText("运行错误!")
  63. def execute_query(self, sql_query):
  64. with self.connection.cursor() as cursor:
  65. cursor.execute(sql_query)
  66. return cursor.fetchall()
  67. def insert_data(self):
  68. # 获取输入框的值
  69. name = self.name_edit.text()
  70. username = self.username_edit.text()
  71. password = self.password_edit.text()
  72. # 插入数据
  73. sql_query = f"INSERT INTO {self.table_name} (name, username, password) VALUES ('{name}', '{username}', '{password}')"
  74. self.execute_query(sql_query)
  75. self.connection.commit()
  76. self.init_table_view()
  77. self.clearinput()
  78. self.result_label.setText("新增数据成功!")
  79. def delete_data(self):
  80. username = self.username_edit.text()
  81. # 删除数据
  82. sql_query = f"DELETE FROM {self.table_name} WHERE username = {username}"
  83. self.execute_query(sql_query)
  84. self.connection.commit()
  85. self.init_table_view()
  86. self.result_label.setText("删除数据成功!")
  87. def select_data(self):
  88. username = self.username_edit.text()
  89. try:
  90. # 检查连接是否存在,断开的话重连
  91. self.connection.ping(reconnect=True)
  92. if username=='':
  93. self.init_table_view()
  94. self.result_label.setText("请输入账号查询!")
  95. return
  96. # 执行查询
  97. with self.connection.cursor() as cursor:
  98. sql_query = f"SELECT name, username, password FROM {self.table_name} WHERE username={username}"
  99. cursor.execute(sql_query)
  100. results = cursor.fetchall()
  101. if len(results) == 0:
  102. self.init_table_view()
  103. QMessageBox.information(self, "提示", "没有符合条件的记录", QMessageBox.Ok)
  104. else:
  105. self.data_table.clear()
  106. self.data_table.setRowCount(len(results))
  107. self.data_table.setColumnCount(3)
  108. for index, result in enumerate(results):
  109. name_item = QTableWidgetItem()
  110. name_item.setText(str(result['name']))
  111. username_item = QTableWidgetItem()
  112. username_item.setText(str(result['username']))
  113. password_item = QTableWidgetItem()
  114. password_item.setText(str(result['password']))
  115. self.data_table.setItem(index, 0, name_item)
  116. self.data_table.setItem(index, 1, username_item)
  117. self.data_table.setItem(index, 2, password_item)
  118. # 设置表头
  119. self.data_table.setHorizontalHeaderLabels(['姓名', '账号', '密码'])
  120. self.result_label.setText("数据加载成功!")
  121. except Exception as e:
  122. print(e)
  123. self.result_label.setText("运行错误!")
  124. def update_data(self):
  125. # 获取修改后的值
  126. new_name = self.name_edit.text()
  127. username = self.username_edit.text()
  128. new_password = self.password_edit.text()
  129. # 更新数据
  130. sql_query = f"UPDATE {self.table_name} SET name='{new_name}', password='{new_password}' WHERE username='{username}'"
  131. self.execute_query(sql_query)
  132. self.connection.commit()
  133. self.init_table_view()
  134. self.clearinput()
  135. self.result_label.setText("修改数据成功!")
  136. if __name__ == "__main__":
  137. app = QApplication(sys.argv)
  138. window = MainWindow()
  139. window.show()
  140. sys.exit(app.exec_())
  1. from PyQt5 import QtWidgets, QtCore, QtGui
  2. class Ui_MainWindow(object):
  3. def setupUi(self, MainWindow):
  4. MainWindow.setObjectName("MainWindow")
  5. MainWindow.resize(714, 302)
  6. self.centralwidget = QtWidgets.QWidget(MainWindow)
  7. self.centralwidget.setObjectName("centralwidget")
  8. self.name_edit = QtWidgets.QLineEdit(self.centralwidget)
  9. self.name_edit.setGeometry(QtCore.QRect(110, 80, 131, 31))
  10. self.name_edit.setObjectName("name_edit")
  11. self.username_edit = QtWidgets.QLineEdit(self.centralwidget)
  12. self.username_edit.setGeometry(QtCore.QRect(110, 120, 131, 31))
  13. self.username_edit.setObjectName("username_edit")
  14. self.username_label = QtWidgets.QLabel(self.centralwidget)
  15. self.username_label.setGeometry(QtCore.QRect(80, 130, 60, 16))
  16. self.username_label.setObjectName("username_label")
  17. self.name_labe = QtWidgets.QLabel(self.centralwidget)
  18. self.name_labe.setGeometry(QtCore.QRect(80, 90, 60, 16))
  19. self.name_labe.setObjectName("name_labe")
  20. self.insert_btn = QtWidgets.QPushButton(self.centralwidget)
  21. self.insert_btn.setGeometry(QtCore.QRect(70, 210, 111, 41))
  22. self.insert_btn.setObjectName("insert_btn")
  23. self.del_btn = QtWidgets.QPushButton(self.centralwidget)
  24. self.del_btn.setGeometry(QtCore.QRect(180, 210, 111, 41))
  25. self.del_btn.setObjectName("del_btn")
  26. self.password_label = QtWidgets.QLabel(self.centralwidget)
  27. self.password_label.setGeometry(QtCore.QRect(80, 170, 60, 16))
  28. self.password_label.setObjectName("password_label")
  29. self.password_edit = QtWidgets.QLineEdit(self.centralwidget)
  30. self.password_edit.setGeometry(QtCore.QRect(110, 160, 131, 31))
  31. self.password_edit.setObjectName("password_edit")
  32. self.select_btn = QtWidgets.QPushButton(self.centralwidget)
  33. self.select_btn.setGeometry(QtCore.QRect(405, 210, 113, 41))
  34. self.select_btn.setObjectName("select_btn")
  35. self.update_btn = QtWidgets.QPushButton(self.centralwidget)
  36. self.update_btn.setGeometry(QtCore.QRect(290, 210, 113, 41))
  37. self.update_btn.setObjectName("update_btn")
  38. self.data_table = QtWidgets.QTableWidget(self.centralwidget)
  39. self.data_table.setGeometry(QtCore.QRect(260, 80, 371, 111))
  40. self.data_table.setObjectName("data_table")
  41. self.data_table.setColumnCount(3)
  42. self.title_label = QtWidgets.QLabel(self.centralwidget)
  43. self.title_label.setGeometry(QtCore.QRect(240, 20, 241, 31))
  44. font = QtGui.QFont()
  45. font.setPointSize(24)
  46. self.title_label.setFont(font)
  47. self.title_label.setTextFormat(QtCore.Qt.AutoText)
  48. self.title_label.setObjectName("title_label")
  49. self.result_label = QtWidgets.QLabel(self.centralwidget)
  50. self.result_label.setGeometry(QtCore.QRect(550, 220, 100, 16))
  51. self.result_label.setObjectName("result_labe")
  52. MainWindow.setCentralWidget(self.centralwidget)
  53. self.statusbar = QtWidgets.QStatusBar(MainWindow)
  54. self.statusbar.setObjectName("statusbar")
  55. MainWindow.setStatusBar(self.statusbar)
  56. self.retranslateUi(MainWindow)
  57. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  58. def retranslateUi(self, MainWindow):
  59. _translate = QtCore.QCoreApplication.translate
  60. MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
  61. self.username_label.setText(_translate("MainWindow", "账号"))
  62. self.name_labe.setText(_translate("MainWindow", "姓名"))
  63. self.insert_btn.setText(_translate("MainWindow", "新增数据"))
  64. self.del_btn.setText(_translate("MainWindow", "删除数据"))
  65. self.password_label.setText(_translate("MainWindow", "密码"))
  66. self.select_btn.setText(_translate("MainWindow", "查询数据"))
  67. self.update_btn.setText(_translate("MainWindow", "修改数据"))
  68. self.title_label.setText(_translate("MainWindow", "MySql数据库增删改查"))
  69. self.result_label.setText(_translate("MainWindow", "数据返回提示!"))
'
运行

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

  1. SET NAMES utf8mb4;
  2. SET FOREIGN_KEY_CHECKS = 0;
  3. -- ----------------------------
  4. -- Table structure for py
  5. -- ----------------------------
  6. DROP TABLE IF EXISTS `py`;
  7. CREATE TABLE `py` (
  8. `name` varchar(32) NOT NULL,
  9. `username` varchar(32) NOT NULL,
  10. `password` varchar(32) NOT NULL
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  12. -- ----------------------------
  13. -- Records of py
  14. -- ----------------------------
  15. BEGIN;
  16. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('宋云熙', '42852503', 'j0XEAFjGhe');
  17. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('郭子异', '65850169', 'cZfZKSur5K');
  18. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('萧云熙', '82986682', 'vIPbkqG46a');
  19. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('崔子韬', '15959578', 'ZDUs4fISv2');
  20. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('黄秀英', '16765807', '7IwW55RFW6');
  21. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('马杰宏', '22390686', 'dehCa2pkKI');
  22. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('谭杰宏', '01780393', '0Da7M7XKpt');
  23. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('傅杰宏', '63344106', 'RdUBUJqaku');
  24. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('叶秀英', '93079587', 'nhdtVDVBJf');
  25. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('汪杰宏', '58124611', '2CBq9Osyc3');
  26. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('武宇宁', '30067171', 'Xf1VzaY4rU');
  27. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('萧子韬', '30257708', 'anGe3t8s24');
  28. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('范震南', '89349269', '3Mw47dOrGR');
  29. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('戴秀英', '00413308', 'M6ykmMB4fe');
  30. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('叶岚', '45469274', 'gMx0nzNlYo');
  31. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('段子异', '99582800', 'MPtUEfXgiq');
  32. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('梁岚', '93527654', 'ARckn0uKld');
  33. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('钱岚', '30677789', 'slcDuaEfTA');
  34. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('沈璐', '13172293', 'LqlGIU9peZ');
  35. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('毛秀英', '42437915', 'tMYpYMt5T2');
  36. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('夏璐', '25857784', 'xniT5HUmwo');
  37. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('蔡杰宏', '19299346', 'IAOyT2AFNf');
  38. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('宋秀英', '03614456', '5Am7JP2Qj3');
  39. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('石子异', '06031667', 'JTIYwtD8wR');
  40. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('田睿', '61213562', 'lKfNh1bWMb');
  41. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('吴璐', '55083345', 'f0mqbEth2k');
  42. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('黎子韬', '06528774', 'Rlp3sfhRiW');
  43. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('', '', '');
  44. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('', '', '');
  45. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('', '', '');
  46. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('', '', '');
  47. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('', '', '');
  48. INSERT INTO `py` (`name`, `username`, `password`) VALUES ('', '', '');
  49. COMMIT;
  50. SET FOREIGN_KEY_CHECKS = 1;
PyMySQL==1.0.2
PyQt5==5.15.10
PyQt5_sip==12.13.0

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/843455
推荐阅读
相关标签
  

闽ICP备14008679号