根据以下给的数据库表结构,用PyQt5+MySQL实现增删改查,表结构如下:CREATE TABLE `register_copy1` ( `id` int NOT NULL AUTO_INCREMENT, `register_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `tooth_number` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `hospital_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `doctor_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `patient_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `color_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `category_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `price` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `tooth_a` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `tooth_b` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `tooth_c` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `tooth_d` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `number` int NOT NULL, `amount_of_money` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `delivery_date` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `register_date` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `total_amount` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 48 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
时间: 2023-03-31 12:01:27 浏览: 77
我可以回答这个问题。要实现增删改查,需要使用PyQt5和MySQL。首先,需要连接到MySQL数据库,然后创建一个表格模型,并将其与表格视图关联。接下来,可以使用模型的方法来添加、删除和修改数据。查询数据可以使用SQL语句来执行。具体实现细节可以参考PyQt5和MySQL的文档。
相关问题
PyQt5+MySQL+PyMySQL模块实现个简单的增删改查,代码示例
### 回答1:
以下是一个简单的 PyQt5 MySQL PyMySQL 模块实现增删改查的示例代码:
```python
import pymysql
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout, QMessageBox, QTableWidget, QTableWidgetItem
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('PyQt5 MySQL PyMySQL')
self.setGeometry(300, 300, 500, 500)
# 连接 MySQL 数据库
self.conn = pymysql.connect(host='localhost', user='root', password='password', database='test', charset='utf8')
self.cursor = self.conn.cursor()
# 创建控件
self.label1 = QLabel('姓名')
self.label2 = QLabel('年龄')
self.label3 = QLabel('性别')
self.nameEdit = QLineEdit()
self.ageEdit = QLineEdit()
self.genderEdit = QLineEdit()
self.addButton = QPushButton('添加')
self.deleteButton = QPushButton('删除')
self.updateButton = QPushButton('更新')
self.queryButton = QPushButton('查询')
self.tableWidget = QTableWidget()
# 布局
hbox1 = QHBoxLayout()
hbox1.addWidget(self.label1)
hbox1.addWidget(self.nameEdit)
hbox1.addWidget(self.label2)
hbox1.addWidget(self.ageEdit)
hbox1.addWidget(self.label3)
hbox1.addWidget(self.genderEdit)
hbox2 = QHBoxLayout()
hbox2.addWidget(self.addButton)
hbox2.addWidget(self.deleteButton)
hbox2.addWidget(self.updateButton)
hbox2.addWidget(self.queryButton)
vbox = QVBoxLayout()
vbox.addLayout(hbox1)
vbox.addLayout(hbox2)
vbox.addWidget(self.tableWidget)
self.setLayout(vbox)
# 信号槽连接
self.addButton.clicked.connect(self.addRecord)
self.deleteButton.clicked.connect(self.deleteRecord)
self.updateButton.clicked.connect(self.updateRecord)
self.queryButton.clicked.connect(self.queryRecord)
# 显示窗口
self.show()
def addRecord(self):
name = self.nameEdit.text()
age = self.ageEdit.text()
gender = self.genderEdit.text()
if name and age and gender:
sql = "INSERT INTO students (name, age, gender) VALUES ('{}', {}, '{}')".format(name, age, gender)
try:
self.cursor.execute(sql)
self.conn.commit()
QMessageBox.information(self, '添加成功', '添加记录成功!')
except Exception as e:
self.conn.rollback()
QMessageBox.warning(self, '添加失败', '添加记录失败:{}'.format(str(e)))
else:
QMessageBox.warning(self, '添加失败', '请填写完整信息!')
def deleteRecord(self):
row = self.tableWidget.currentRow()
if row >= :
id = self.tableWidget.item(row, ).text()
sql = "DELETE FROM students WHERE id = {}".format(id)
try:
self.cursor.execute(sql)
self.conn.commit()
self.tableWidget.removeRow(row)
QMessageBox.information(self, '删除成功', '删除记录成功!')
except Exception as e:
self.conn.rollback()
QMessageBox.warning(self, '删除失败', '删除记录失败:{}'.format(str(e)))
else:
QMessageBox.warning(self, '删除失败', '请选择要删除的记录!')
def updateRecord(self):
row = self.tableWidget.currentRow()
if row >= :
id = self.tableWidget.item(row, ).text()
name = self.nameEdit.text()
age = self.ageEdit.text()
gender = self.genderEdit.text()
if name and age and gender:
sql = "UPDATE students SET name = '{}', age = {}, gender = '{}' WHERE id = {}".format(name, age, gender, id)
try:
self.cursor.execute(sql)
self.conn.commit()
self.tableWidget.setItem(row, 1, QTableWidgetItem(name))
self.tableWidget.setItem(row, 2, QTableWidgetItem(age))
self.tableWidget.setItem(row, 3, QTableWidgetItem(gender))
QMessageBox.information(self, '更新成功', '更新记录成功!')
except Exception as e:
self.conn.rollback()
QMessageBox.warning(self, '更新失败', '更新记录失败:{}'.format(str(e)))
else:
QMessageBox.warning(self, '更新失败', '请填写完整信息!')
else:
QMessageBox.warning(self, '更新失败', '请选择要更新的记录!')
def queryRecord(self):
self.tableWidget.clear()
self.tableWidget.setColumnCount(4)
self.tableWidget.setHorizontalHeaderLabels(['ID', '姓名', '年龄', '性别'])
sql = "SELECT * FROM students"
try:
self.cursor.execute(sql)
results = self.cursor.fetchall()
self.tableWidget.setRowCount(len(results))
for i, row in enumerate(results):
for j, col in enumerate(row):
self.tableWidget.setItem(i, j, QTableWidgetItem(str(col)))
except Exception as e:
QMessageBox.warning(self, '查询失败', '查询记录失败:{}'.format(str(e)))
def closeEvent(self, event):
self.cursor.close()
self.conn.close()
if __name__ == '__main__':
app = QApplication([])
ex = Example()
app.exec_()
```
注意:这只是一个简单的示例代码,实际应用中需要根据具体情况进行修改和优化。
### 回答2:
使用PyQt5和PyMySQL模块实现一个简单的增删改查操作,以下是代码示例:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox, QTableWidgetItem, QTableWidget
import pymysql
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
self.db = pymysql.connect("localhost", "username", "password", "database_name")
self.cursor = self.db.cursor()
def initUI(self):
self.setWindowTitle("简单的增删改查")
self.setGeometry(300, 300, 500, 350)
self.centralWidget = QWidget(self)
self.setCentralWidget(self.centralWidget)
self.layout = QVBoxLayout()
self.centralWidget.setLayout(self.layout)
self.inputLayout = QHBoxLayout()
self.layout.addLayout(self.inputLayout)
self.nameLabel = QLabel("姓名:")
self.inputLayout.addWidget(self.nameLabel)
self.nameInput = QLineEdit()
self.inputLayout.addWidget(self.nameInput)
self.addButton = QPushButton("添加")
self.addButton.clicked.connect(self.addRecord)
self.layout.addWidget(self.addButton)
self.tableWidget = QTableWidget()
self.layout.addWidget(self.tableWidget)
self.loadTable()
def loadTable(self):
self.cursor.execute("SELECT * FROM students")
results = self.cursor.fetchall()
self.tableWidget.setRowCount(len(results))
self.tableWidget.setColumnCount(2)
self.tableWidget.setHorizontalHeaderLabels(["ID", "姓名"])
for i, row in enumerate(results):
for j, value in enumerate(row):
self.tableWidget.setItem(i, j, QTableWidgetItem(str(value)))
def addRecord(self):
name = self.nameInput.text()
if name:
sql = "INSERT INTO students (name) VALUES ('%s')" % name
try:
self.cursor.execute(sql)
self.db.commit()
self.nameInput.clear()
self.loadTable()
except:
self.db.rollback()
QMessageBox.warning(self, "Error", "添加记录失败")
else:
QMessageBox.warning(self, "Error", "姓名不能为空")
def closeEvent(self, event):
self.cursor.close()
self.db.close()
if __name__ == "__main__":
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
```
上述代码实现了一个简单的GUI界面,包含一个用于输入姓名的文本框和一个用于添加记录的按钮。数据存储在MySQL数据库的`students`表中,其中包含`id`和`name`两个字段。点击添加按钮后将会将姓名插入到数据库中,并更新显示在表格中。表格使用QTableWidget来显示。通过`PyMySQL`模块连接和操作数据库。
### 回答3:
以下是使用PyQt5和PyMySQL模块实现简单的增删改查的代码示例:
```python
import pymysql
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QPushButton, QVBoxLayout, QWidget
class DatabaseWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("数据库操作")
self.setGeometry(100, 100, 400, 300)
self.table_widget = QTableWidget()
self.setCentralWidget(self.table_widget)
self.btn_refresh = QPushButton("刷新")
self.btn_refresh.clicked.connect(self.refresh_data)
self.btn_add = QPushButton("添加")
self.btn_add.clicked.connect(self.add_data)
self.btn_delete = QPushButton("删除")
self.btn_delete.clicked.connect(self.delete_data)
self.btn_update = QPushButton("更新")
self.btn_update.clicked.connect(self.update_data)
layout = QVBoxLayout()
layout.addWidget(self.btn_refresh)
layout.addWidget(self.btn_add)
layout.addWidget(self.btn_delete)
layout.addWidget(self.btn_update)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
self.db = pymysql.connect(host='localhost', user='root', password='password', db='testdb')
self.cursor = self.db.cursor()
self.refresh_data()
def refresh_data(self):
self.table_widget.clear()
self.cursor.execute("SELECT * FROM users")
data = self.cursor.fetchall()
self.table_widget.setRowCount(len(data))
self.table_widget.setColumnCount(len(data[0]))
for i, row in enumerate(data):
for j, value in enumerate(row):
item = QTableWidgetItem(str(value))
self.table_widget.setItem(i, j, item)
def add_data(self):
self.cursor.execute("INSERT INTO users (name, age) VALUES ('John', 30)")
self.db.commit()
self.refresh_data()
def delete_data(self):
selected_row = self.table_widget.currentRow()
id = self.table_widget.item(selected_row, 0).text()
self.cursor.execute(f"DELETE FROM users WHERE id={id}")
self.db.commit()
self.refresh_data()
def update_data(self):
selected_row = self.table_widget.currentRow()
id = self.table_widget.item(selected_row, 0).text()
self.cursor.execute(f"UPDATE users SET name='Mike', age=25 WHERE id={id}")
self.db.commit()
self.refresh_data()
if __name__ == '__main__':
app = QApplication([])
window = DatabaseWindow()
window.show()
app.exec_()
```
此示例展示了一个使用PyQt5和PyMySQL模块实现的简单的数据库操作窗口。窗口中包含一个表格用于显示数据库中的数据。通过点击不同按钮,可以刷新数据,添加数据,删除数据和更新数据。代码中的数据库连接参数需要根据实际情况进行修改。
pyqt5 读取sql3数据库database1,并将其中的数据库表history_data_table显示到QTableWidget中,并实现对数据库表的增删改查功能
以下是实现的代码:
```python
import sqlite3
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QLineEdit, QPushButton, QVBoxLayout, QWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Database Editor")
self.setGeometry(100, 100, 800, 600)
# 创建表格和按钮
self.table_widget = QTableWidget()
self.button_add = QPushButton("Add")
self.button_update = QPushButton("Update")
self.button_delete = QPushButton("Delete")
# 布局
layout = QVBoxLayout()
layout.addWidget(self.table_widget)
layout.addWidget(self.button_add)
layout.addWidget(self.button_update)
layout.addWidget(self.button_delete)
# 设置主窗口的中央部件
central_widget = QWidget()
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
# 连接数据库
self.connection = sqlite3.connect("database1.db")
self.cursor = self.connection.cursor()
# 加载数据
self.load_data()
# 连接按钮的信号和槽
self.button_add.clicked.connect(self.add_data)
self.button_update.clicked.connect(self.update_data)
self.button_delete.clicked.connect(self.delete_data)
def load_data(self):
# 查询数据
self.cursor.execute("SELECT * FROM history_data_table")
data = self.cursor.fetchall()
# 设置表格的行数和列数
self.table_widget.setRowCount(len(data))
self.table_widget.setColumnCount(len(data[0]))
# 设置表格的表头
self.table_widget.setHorizontalHeaderLabels(["ID", "Date", "Value"])
# 填充表格
for i, row in enumerate(data):
for j, cell in enumerate(row):
self.table_widget.setItem(i, j, QTableWidgetItem(str(cell)))
def add_data(self):
# 创建对话框
dialog = QDialog(self)
dialog.setWindowTitle("Add Data")
# 创建文本框和按钮
line_edit_date = QLineEdit()
line_edit_value = QLineEdit()
button_ok = QPushButton("OK")
button_cancel = QPushButton("Cancel")
# 布局
layout = QVBoxLayout()
layout.addWidget(line_edit_date)
layout.addWidget(line_edit_value)
layout.addWidget(button_ok)
layout.addWidget(button_cancel)
dialog.setLayout(layout)
# 连接按钮的信号和槽
button_ok.clicked.connect(lambda: self.add_data_to_database(dialog, line_edit_date, line_edit_value))
button_cancel.clicked.connect(dialog.reject)
# 显示对话框
dialog.exec_()
def add_data_to_database(self, dialog, line_edit_date, line_edit_value):
# 插入数据
date = line_edit_date.text()
value = line_edit_value.text()
self.cursor.execute("INSERT INTO history_data_table (date, value) VALUES (?, ?)", (date, value))
self.connection.commit()
# 关闭对话框
dialog.accept()
# 重新加载数据
self.load_data()
def update_data(self):
# 获取选中的行和列
selected_items = self.table_widget.selectedItems()
if len(selected_items) == 0:
return
row = selected_items[0].row()
column = selected_items[0].column()
# 获取对应的数据
id = self.table_widget.item(row, 0).text()
date = self.table_widget.item(row, 1).text()
value = self.table_widget.item(row, 2).text()
# 创建对话框
dialog = QDialog(self)
dialog.setWindowTitle("Update Data")
# 创建文本框和按钮
line_edit_date = QLineEdit(date)
line_edit_value = QLineEdit(value)
button_ok = QPushButton("OK")
button_cancel = QPushButton("Cancel")
# 布局
layout = QVBoxLayout()
layout.addWidget(line_edit_date)
layout.addWidget(line_edit_value)
layout.addWidget(button_ok)
layout.addWidget(button_cancel)
dialog.setLayout(layout)
# 连接按钮的信号和槽
button_ok.clicked.connect(lambda: self.update_data_in_database(dialog, id, line_edit_date, line_edit_value))
button_cancel.clicked.connect(dialog.reject)
# 显示对话框
dialog.exec_()
def update_data_in_database(self, dialog, id, line_edit_date, line_edit_value):
# 更新数据
date = line_edit_date.text()
value = line_edit_value.text()
self.cursor.execute("UPDATE history_data_table SET date = ?, value = ? WHERE id = ?", (date, value, id))
self.connection.commit()
# 关闭对话框
dialog.accept()
# 重新加载数据
self.load_data()
def delete_data(self):
# 获取选中的行和列
selected_items = self.table_widget.selectedItems()
if len(selected_items) == 0:
return
row = selected_items[0].row()
column = selected_items[0].column()
# 获取对应的数据
id = self.table_widget.item(row, 0).text()
# 删除数据
self.cursor.execute("DELETE FROM history_data_table WHERE id = ?", (id,))
self.connection.commit()
# 重新加载数据
self.load_data()
if __name__ == "__main__":
app = QApplication([])
main_window = MainWindow()
main_window.show()
app.exec_()
```
在这个程序中,我们使用了 PyQT5 和 SQLite3 库。主窗口中包含一个 QTableWidget 和三个 QPushButton,分别用于添加、更新和删除数据。在程序启动时,我们连接了名为 database1.db 的 SQLite3 数据库,并加载了其中的 history_data_table 数据表中的数据到 QTableWidget 中。当用户点击添加、更新或删除按钮时,我们创建了一个 QDialog 显示对应的文本框和按钮,然后根据用户输入的数据来更新数据库。最后,我们重新加载了数据,并在 QTableWidget 中显示最新的数据。