在PyQt5中其实连接MySQL数据库的方法还是很多的,写法方法都不太一样,本篇文章将教给大家如何使用pymysql进行连接,本节课将通过实际案例让大家学习了解如何对数据库进行增删改查!我个人认为:我一步一步教你怎么用,不如教你如何实战,用实战来学习理论会比为了实践而学习理论更透彻!
MySQL 数据库
我使用的Navicat Premium 对数据库进行操作,windows有免费的破解版(还挺好的也挺稳定的),Mac建议买正版吧...要不然老闪退(别问我咋知道的。。。哭死)
这是我的设计的表,我会把数据库的表放在最后,有需要的朋友直接cv
我这里MySQL是8.0.28的版本进行演示!
MySQL 是一个关系型数据库管理系统,支持常见的数据库操作,包括增加(INSERT)、删除(DELETE)、修改(UPDATE)和查询(SELECT)。下面是这些操作的简要说明:
增加数据 (INSERT):
- 使用
INSERT INTO
语句向表中添加新的行。- 语法示例:
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
- 示例:
INSERT INTO students (id, name, age) VALUES (1, 'John', 25);
删除数据 (DELETE):
- 使用
DELETE FROM
语句删除表中的行。- 语法示例:
DELETE FROM table_name WHERE condition;
- 示例:
DELETE FROM students WHERE id = 1;
修改数据 (UPDATE):
- 使用
UPDATE
语句修改表中的数据。- 语法示例:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
- 示例:
UPDATE students SET age = 26 WHERE id = 1;
查询数据 (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()
-
初始化函数 (
__init__
):-
super(MainWindow, self).__init__()
调用父类的初始化函数,确保正确地初始化QMainWindow
和Ui_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
方法,初始化表格视图。
-
-
数据库连接:
这里使用了pymysql.connect
方法来创建数据库连接对象,以便在应用程序运行期间与 MySQL 数据库进行交互。 -
表格视图初始化:
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.connection
和 self.data_table
这两个对象已经正确初始化。
-
检查连接是否存在,断开的话重连:
self.connection.ping(reconnect=True)
语句用于检查数据库连接是否存在,如果存在则重新连接。这是为了确保在执行查询之前数据库连接是可用的。 -
执行查询:
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 查询。
-
获取查询结果:
results = cursor.fetchall()
获取查询结果。这将返回一个包含所有查询行的元组列表。 -
处理查询结果:
if len(results) == 0:
检查结果是否为空,如果为空则显示一个提示消息。else:
如果结果不为空,就设置表格的行数和列数,然后遍历结果并将每个值添加到表格中。self.data_table.setItem(index, column, item)
将查询结果的每个字段值设置到表格的相应位置。
-
设置表头:
self.data_table.setHorizontalHeaderLabels(['姓名', '账号', '密码'])
设置表格的列头标签。 -
显示结果信息:
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
。
-
参数:
sql_query
是传递给函数的 SQL 查询语句。 -
执行查询:
with self.connection.cursor() as cursor:
创建了一个数据库游标,该游标在with
语句块中生效。cursor.execute(sql_query)
执行传入的 SQL 查询语句。 -
获取查询结果:
cursor.fetchall()
获取查询结果,这个结果以元组列表的形式返回。 -
返回结果:
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("新增数据成功!")
-
获取输入框的值:
name = self.name_edit.text()
获取名字输入框的文本内容。username = self.username_edit.text()
获取用户名输入框的文本内容。password = self.password_edit.text()
获取密码输入框的文本内容。
-
构建插入数据的 SQL 查询语句:
sql_query = f"INSERT INTO {self.table_name} (name, username, password) VALUES ('{name}', '{username}', '{password}')"
构建了一个 SQL 查询语句,用于向数据库插入新的数据。这里使用了格式化字符串,将获取的输入框值插入到 SQL 语句中。 -
执行插入操作:
self.execute_query(sql_query)
调用先前解释的execute_query
方法执行插入操作。 -
提交事务:
self.connection.commit()
提交了对数据库的修改,将插入操作确切地应用到数据库中。 -
更新表格视图:
self.init_table_view()
调用init_table_view
方法,刷新表格视图以显示最新的数据。 -
清空输入框内容:
self.clearinput()
调用clearinput
方法,清空输入框的内容,以便用户输入下一组数据。 -
设置结果标签:
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 语句中需要使用单引号将其括起来。
-
获取用户名输入框的值:
username = self.username_edit.text()
获取用户名输入框的文本内容。 -
构建删除数据的 SQL 查询语句:
sql_query = f"DELETE FROM {self.table_name} WHERE username = {username}"
构建了一个 SQL 查询语句,用于从数据库中删除指定用户名的数据。这里使用了格式化字符串,将获取的用户名插入到 SQL 语句中。 -
执行删除操作:
self.execute_query(sql_query)
调用先前解释的execute_query
方法执行删除操作。 -
提交事务:
self.connection.commit()
提交了对数据库的修改,将删除操作确切地应用到数据库中。 -
更新表格视图:
self.init_table_view()
调用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("运行错误!")
-
获取用户名输入框的值:
username = self.username_edit.text()
获取用户名输入框的文本内容。 -
检查用户名是否为空:
if username=='':
如果用户名为空,就初始化表格视图、设置结果标签,然后直接返回,不执行查询操作。 -
检查数据库连接:
self.connection.ping(reconnect=True)
检查数据库连接是否存在,如果存在则重新连接。 -
执行查询:
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 查询。
-
获取查询结果:
results = cursor.fetchall()
获取查询结果,这个结果以元组列表的形式返回。 -
处理查询结果:
如果查询结果为空,初始化表格视图并显示提示消息;否则,清空表格,设置新的行数和列数,然后遍历结果并将每个值添加到表格中。 -
设置表头和结果标签:
self.data_table.setHorizontalHeaderLabels(['姓名', '账号', '密码'])
设置表格的列头标签。self.result_label.setText("数据加载成功!")
设置界面上的标签,提示用户数据加载成功。
-
异常处理:
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("修改数据成功!")
-
获取修改后的值:
new_name = self.name_edit.text()
获取名字输入框中修改后的文本内容。username = self.username_edit.text()
获取用户名输入框的文本内容。new_password = self.password_edit.text()
获取密码输入框中修改后的文本内容。
-
构建更新数据的 SQL 查询语句:
sql_query = f"UPDATE {self.table_name} SET name='{new_name}', password='{new_password}' WHERE username='{username}'"
构建了一个 SQL 查询语句,用于更新数据库中指定用户名的数据。这里使用了格式化字符串,将获取的修改后的值和用户名插入到 SQL 语句中。 -
执行更新操作:
self.execute_query(sql_query)
调用先前解释的execute_query
方法执行更新操作。 -
提交事务:
self.connection.commit()
提交了对数据库的修改,将更新操作确切地应用到数据库中。 -
更新表格视图:
self.init_table_view()
调用init_table_view
方法,刷新表格视图以显示最新的数据。 -
清空输入框内容:
self.clearinput()
调用clearinput
方法,清空输入框的内容,以便用户输入下一组数据。 -
设置结果标签:
self.result_label.setText("修改数据成功!")
设置界面上的标签,提示用户修改数据成功。
这个方法允许用户通过界面输入框输入要修改的数据,然后将这些数据更新到 MySQL 数据库中,并刷新界面上的表格视图以显示最新的数据。需要注意的是,在 SQL 查询语句中的
new_name
和new_password
是字符串,所以在 SQL 语句中需要使用单引号将其括起来。
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
-
应用程序初始化:
app = QApplication(sys.argv)
创建一个QApplication
对象,表示应用程序的实例。sys.argv
是用于从命令行接收参数的列表,但在这个例子中一般用不到。 -
主窗口初始化:
window = MainWindow()
创建一个MainWindow
对象,即主窗口的实例。这个对象是你设计的界面的主窗口。 -
显示主窗口:
window.show()
调用show
方法,显示主窗口。这使得主窗口界面出现在屏幕上。 -
应用程序执行:
sys.exit(app.exec_())
开始执行应用程序的主事件循环。app.exec_()
启动了 Qt 的事件循环,使得应用程序保持运行状态,等待用户的输入和操作。 -
退出应用程序:
当用户关闭应用程序窗口时,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的程序!感谢支持!有什么想看的程序在评论区留言!