1. Pyqt5数据库使用详细教程
PyQt5是一个用来快速地创建 Python GUI 应用程序的工具包,结合 PyQt5 和数据库,将大大提高应用程序的功能性和适用性。在这篇教程中,我们将学习如何使用 PyQt5 来操作数据库。
1.1 安装PyQt5和数据库驱动
在开始使用 PyQt5 和数据库之前,需要先安装 PyQt5 和数据库驱动。在本篇教程中,我们将以 MySQL 工具为例进行操作。此外,我们还需要安装 PyQt5 和 PyMySQL 库。下面是相应的代码:
pip install pyqt5
pip install pymysql
1.2 创建数据库
我们需要创建一个数据库以存储数据。在本例中,我们将创建一个名为 testdb 的数据库。
CREATE DATABASE testdb;
1.3 创建表格
创建一个名为 employee 的表格,并添加一些数据。
CREATE TABLE employee (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
birthdate DATE,
salary INT
);
INSERT INTO employee (name, birthdate, salary) VALUES
("张三", "1990-01-01", 2000),
("李四", "1991-02-02", 2500),
("王五", "1992-03-03", 3000);
1.4 PyQt5界面设计
我们将使用 PyQt5 创建一个简单的用户界面,以进行数据库操作。下面是相应的代码:
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QHBoxLayout, QVBoxLayout, QTableWidget, QTableWidgetItem, QPushButton, QLabel, QLineEdit
import sys
import pymysql
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setGeometry(100, 100, 600, 400)
self.setWindowTitle("PyQt5 Database Tutorial")
self.initUI()
self.show()
def initUI(self):
# 水平、垂直布局
layout = QVBoxLayout()
# 搜索框布局
search_layout = QHBoxLayout()
self.search_input = QLineEdit()
self.search_btn = QPushButton("搜索")
self.search_btn.clicked.connect(self.search_employee)
search_layout.addWidget(QLabel("姓名:"))
search_layout.addWidget(self.search_input)
search_layout.addWidget(self.search_btn)
layout.addLayout(search_layout)
# 表格
self.table = QTableWidget()
self.table.setColumnCount(4)
self.table.setHorizontalHeaderLabels(["ID", "姓名", "生日", "薪资"])
layout.addWidget(self.table)
# 添加、修改、删除按钮
buttons_layout = QHBoxLayout()
self.add_btn = QPushButton("添加")
self.add_btn.clicked.connect(self.add_employee)
self.update_btn = QPushButton("修改")
self.update_btn.clicked.connect(self.update_employee)
self.delete_btn = QPushButton("删除")
self.delete_btn.clicked.connect(self.delete_employee)
buttons_layout.addWidget(self.add_btn)
buttons_layout.addWidget(self.update_btn)
buttons_layout.addWidget(self.delete_btn)
layout.addLayout(buttons_layout)
# 中央窗口
central_widget = QWidget()
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
# 搜索
def search_employee(self):
name = self.search_input.text()
# 连接数据库
conn = pymysql.connect(
host="localhost",
user="root",
password="root",
database="testdb"
)
cursor = conn.cursor()
# 搜索数据
query = f"SELECT * FROM employee WHERE name LIKE '%{name}%'"
cursor.execute(query)
rows = cursor.fetchall()
# 清空表格
self.table.setRowCount(0)
# 在表格中显示数据
for row_number, row_data in enumerate(rows):
self.table.insertRow(row_number)
for column_number, column_data in enumerate(row_data):
self.table.setItem(row_number, column_number, QTableWidgetItem(str(column_data)))
conn.close()
# 添加
def add_employee(self):
name = self.search_input.text()
birthdate = self.birthdate_input.text()
salary = self.salary_input.text()
# 连接数据库
conn = pymysql.connect(
host="localhost",
user="root",
password="root",
database="testdb"
)
cursor = conn.cursor()
# 添加数据
query = f"INSERT INTO employee (name, birthdate, salary) VALUES ('{name}', '{birthdate}', {salary})"
cursor.execute(query)
conn.commit()
conn.close()
# 更新表格
self.search_employee()
# 修改
def update_employee(self):
pass
# 删除
def delete_employee(self):
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
sys.exit(app.exec_())
1.5 连接数据库
在上述代码中,我们使用 pymysql 模块来连接 MySQL 数据库。我们需要提供主机名、用户名、密码和数据库名等信息。下面是连接数据库的代码:
conn = pymysql.connect(
host="localhost",
user="root",
password="root",
database="testdb"
)
cursor = conn.cursor()
1.6 搜索数据
为了从数据库中检索数据,我们需要使用 SELECT 语句。在本例中,我们将在员工表格中搜索名字中包含关键字的员工信息。下面是搜索数据的代码:
query = f"SELECT * FROM employee WHERE name LIKE '%{name}%'"
cursor.execute(query)
rows = cursor.fetchall()
1.7 插入数据
为了将数据插入到数据库中,我们需要使用 INSERT INTO 语句。在本例中,我们将添加员工数据。下面是添加数据的代码:
query = f"INSERT INTO employee (name, birthdate, salary) VALUES ('{name}', '{birthdate}', {salary})"
cursor.execute(query)
conn.commit()
1.8 更新数据
为了更新数据库中的数据,我们需要使用 UPDATE 语句。在本例中,我们将更新员工数据。下面是更新数据的代码:
query = f"UPDATE employee SET ... WHERE ..."
cursor.execute(query)
conn.commit()
1.9 删除数据
为了从数据库中删除数据,我们需要使用 DELETE 语句。在本例中,我们将删除员工数据。下面是删除数据的代码:
query = f"DELETE FROM employee WHERE ..."
cursor.execute(query)
conn.commit()
1.10 打包解决方案
在完成应用程序的开发后,我们可以使用 PyInstaller 来将其打包成一个独立的可执行文件。
首先,我们需要安装 PyInstaller:
pip install pyinstaller
然后,转到应用程序的根目录,并运行以下命令:
pyinstaller --onefile --windowed main.py
打包成功后,在 dist 目录下会生成一个新的可执行文件。
2. 总结
PyQt5 和数据库的结合为开发 Python GUI 应用程序提供了无限的可能。在本篇教程中,我们学习了如何使用 PyQt5 操作 MySQL 数据库,并创建了一个简单的用户界面进行操作。我们还使用 PyInstaller 将应用程序打包成独立的可执行文件。