python连接mysql数据库,无法完成删除表操作

用python编写代码连接数据库,无法完成对表的删除操作,报错如下:

img

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语句呀