用python编写代码连接数据库,无法完成对表的删除操作,报错如下:
python源码如下:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import Qt
import pymysql
class DeleteWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
screen_x = 960
screen_y = 500
self.resize(screen_x, screen_y)
self.setWindowTitle('删除窗口')
center_point = QDesktopWidget().availableGeometry().center()
self.move(center_point.x() - int(screen_x / 2), center_point.y() - int(screen_y / 2))
self.setWindowIcon(QIcon('image.png'))
layout = QVBoxLayout()
label = QLabel('删除系统')
label.setFont(QFont('微软雅黑', 24))
label.setAlignment(Qt.Qt.AlignCenter)
TableStudent = QPushButton('删除学生表')
TableStudent.setFixedSize(500, 30)
TableTeacher = QPushButton('删除教师表')
TableTeacher.setFixedSize(500, 30)
TableDirector = QPushButton('删除教研主任表')
TableDirector.setFixedSize(500, 30)
TableCourse = QPushButton('删除课程表')
TableCourse.setFixedSize(500, 30)
TableExperiment = QPushButton('删除实验表')
TableExperiment.setFixedSize(500, 30)
TableEcompletion = QPushButton('删除实验完成情况表')
TableEcompletion.setFixedSize(500, 30)
TableScourse = QPushButton('删除学生选课表')
TableScourse.setFixedSize(500, 30)
TableTcourse = QPushButton('删除教师授课表')
TableTcourse.setFixedSize(500, 30)
TableStudent.clicked.connect(lambda: self.showTable('student'))
TableTeacher.clicked.connect(lambda: self.showTable('teacher'))
TableDirector.clicked.connect(lambda: self.showTable('director'))
TableCourse.clicked.connect(lambda: self.showTable('course'))
TableExperiment.clicked.connect(lambda: self.showTable('experiment'))
TableEcompletion.clicked.connect(lambda: self.showTable('e_completion'))
TableScourse.clicked.connect(lambda: self.showTable('sc'))
TableTcourse.clicked.connect(lambda: self.showTable('t_course'))
layout.addWidget(label)
layout.addStretch(1)
layout.addWidget(TableStudent)
layout.addSpacing(20)
layout.addWidget(TableTeacher)
layout.addSpacing(20)
layout.addWidget(TableDirector)
layout.addSpacing(20)
layout.addWidget(TableCourse)
layout.addSpacing(20)
layout.addWidget(TableExperiment)
layout.addSpacing(20)
layout.addWidget(TableEcompletion)
layout.addSpacing(20)
layout.addWidget(TableScourse)
layout.addSpacing(20)
layout.addWidget(TableTcourse)
layout.addStretch(1)
layout.setAlignment(Qt.Qt.AlignCenter)
self.setLayout(layout)
def showTable(self, TargetTable):
conn = pymysql.connect(
host='localhost',
user='root',
password='123456',
database='experiment_report_system',
port=3306
)
cursor = conn.cursor()
select_sql = f"SELECT * FROM {TargetTable};"
cursor.execute(select_sql)
column_names = [i[0] for i in cursor.description]
rows = cursor.fetchall()
cursor.close()
conn.close()
table_window = QDialog(self)
table_window.setWindowTitle(f'{TargetTable} 删除结果')
table_window.setFixedSize(800, 600)
table_model = QStandardItemModel()
table_model.setHorizontalHeaderLabels(['删除行'] + column_names)
for i, row in enumerate(rows):
items = []
for j, cell in enumerate(row):
item = QStandardItem(str(cell))
items.append(item)
delete_item = QStandardItem('删除')
delete_item.setData(i) # 设置数据为行号
delete_item.setTextAlignment(Qt.Qt.AlignCenter)
items.insert(0, delete_item)
table_model.appendRow(items)
table_view = QTableView()
table_view.setModel(table_model)
# 添加槽函数,点击删除按钮删除对应行数据
table_view.clicked.connect(lambda index: self.deleteRow(index, TargetTable))
layout = QVBoxLayout()
layout.addWidget(table_view)
table_window.setLayout(layout)
table_window.exec_()
def deleteRow(self, index, table_name):
# 获取行号
row = index.data()
# 检查点击的单元格是否为“删除”单元格
if index.column() == 0 and row is not None:
# 弹出确认删除的对话框
reply = QMessageBox.question(self, '确认删除', '确认删除该行数据吗?', QMessageBox.Yes | QMessageBox.No,
QMessageBox.No)
if reply == QMessageBox.Yes:
conn = pymysql.connect(
host='localhost',
user='root',
password='123456',
database='experiment_report_system',
port=3306
)
try:
cursor = conn.cursor()
select_sql = f"SHOW KEYS FROM `{table_name}` WHERE Key_name = 'PRIMARY'"
cursor.execute(select_sql)
primary_key = cursor.fetchone()[4]
select_sql = f"SELECT `{primary_key}` FROM `{table_name}` LIMIT {row}, 1"
cursor.execute(select_sql)
primary_key_value = cursor.fetchone()[0]
delete_query = f"DELETE FROM `{table_name}` WHERE `{primary_key}` = %s"
cursor.execute(delete_query, (primary_key_value,))
conn.commit() # 提交对数据库的修改
QMessageBox.information(self, '删除成功', '行删除成功。')
except Exception as e:
QMessageBox.warning(self, '删除错误', f'删除行时发生错误:\n{str(e)}')
finally:
cursor.close()
conn.close()
怎么修改都修改不好
代码是不是不全,没看到删除
你这代码里哪有delete语句呀