Помогите ,пожалуйста, правильно дописать код для удаления записей в SQlite через приложение PyQt5. Буду очень благодарна!

Рейтинг: -1Ответов: 1Опубликовано: 31.05.2023

Нужно, чтобы при нажатии на определенную запись она удалялась. (Кнопка работает лишь один раз. Функция отмечена как "Del". )

from PyQt5.QtWidgets import *
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QApplication

import sys

from os import path

from PyQt5.uic import loadUiType

FROM_CLASS,_ = loadUiType(path.join(path.dirname('__file__'), "untitled.ui"))

import sqlite3

class Main(QMainWindow, FROM_CLASS):
  def __init__(self, parent=None):
    super(Main, self).__init__(parent)
    QMainWindow.__init__(self)
    self.setupUi(self)
    self.Handel_Buttons()

  def Handel_Buttons(self):
    self.search_2.clicked.connect(self.Get_Data)
    self.check.clicked.connect(self.Level)
    self.pushButton_5.clicked.connect(self.Update)
    self.pushButton_7.clicked.connect(self.New)
    self.pushButton_6.clicked.connect(self.Del)

  def Get_Data(self):
    db = sqlite3.connect("database.db")
    cursor = db.cursor()

    command = '''SELECT * from users'''

    result = cursor.execute(command)

    self.tableWidget.setRowCount(0)

    for row_number, row_data in enumerate(result):
        self.tableWidget.insertRow(row_number)
        for column_number, data in enumerate(row_data):
            self.tableWidget.setItem(row_number, column_number, QTableWidgetItem(str(data)))

    print("Выполнено")

    cursor2 = db.cursor()
    ref_nbr = '''SELECT COUNT (DISTINCT name) FROM users'''
    result_ref_nbr = cursor2.execute(ref_nbr)
    self.lbl_ref_nbr.setText(str(result_ref_nbr.fetchone()[0]))


def Level(self):
    db = sqlite3.connect("database.db")
    cursor3 = db.cursor()

    command = '''SELECT id, name, data from users LIMIT 4'''

    result = cursor3.execute(command)

    self.table2.setRowCount(0)

    for row_number, row_data in enumerate(result):
        self.table2.insertRow(row_number)
        for column_number, data in enumerate(row_data):
            self.table2.setItem(row_number, column_number, QTableWidgetItem(str(data)))

    print("Выполнено")


def New(self):
    db = sqlite3.connect("database.db")
    cursor = db.cursor()

    id = int(self.id1.toPlainText())
    name = self.name1.toPlainText()
    data = self.data1.toPlainText()
    dis = self.dis1.toPlainText()
    summ = self.summ1.toPlainText()

    command = '''INSERT INTO users (id, name, data, dis, summ) VALUES (?, ?, ?, ?, ?)'''

    result = cursor.execute(command, (id, name, data, dis, summ))

    self.tableWidget.setRowCount(0)

    for row_number, row_data in enumerate(result):
        self.tableWidget.insertRow(row_number)
        for column_number, data in enumerate(row_data):
            self.tableWidget.setItem(row_number, column_number, QTableWidgetItem(str(data)))
    db.commit()
    cursor.close()

def Update(self):
    db = sqlite3.connect("database.db")
    cursor = db.cursor()
    print("Подключен к SQLite")

    id = int(self.id1.toPlainText())
    name = self.name1.toPlainText()
    data = self.data1.toPlainText()
    dis = self.dis1.toPlainText()
    summ = self.summ1.toPlainText()

    row = (name, data, dis, summ, id)

    update_ ='''Update users set name = ?, data = ?, dis = ?, summ = ? where id = ?'''
    cursor.execute(update_, row)
    db.commit()
    cursor.close()

def Del(self):
    db = sqlite3.connect("database.db")
    cursor = db.cursor()

    cursor.execute('DELETE FROM users WHERE id=3')
    db.commit()
    print("Выполнено")

def main():
 app = QApplication(sys.argv)
 window = Main()
 window.show()
 app.exec_()


if __name__ == '__main__':
  main()

Ответы

▲ 1

Возможно такой вариант Вам подойдёт:

from PyQt5.QtWidgets import *
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QApplication

import sys

from os import path

from PyQt5.uic import loadUiType

FROM_CLASS, _ = loadUiType(path.join(path.dirname('__file__'), "untitled.ui"))

import sqlite3

class Main(QMainWindow, FROM_CLASS):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        QMainWindow.__init__(self)
        self.setupUi(self)
        self.Handel_Buttons()

    def Handel_Buttons(self):
        self.search_2.clicked.connect(self.Get_Data)
        self.check.clicked.connect(self.Level)
        self.pushButton_5.clicked.connect(self.Update)
        self.pushButton_7.clicked.connect(self.New)
        self.pushButton_6.clicked.connect(self.Del)

    def Get_Data(self):
        db = sqlite3.connect("database.db")
        cursor = db.cursor()

        command = '''SELECT * from users'''

        result = cursor.execute(command)

        self.tableWidget.setRowCount(0)

        for row_number, row_data in enumerate(result):
            self.tableWidget.insertRow(row_number)
            for column_number, data in enumerate(row_data):
                self.tableWidget.setItem(row_number, column_number, QTableWidgetItem(str(data)))

        print("Выполнено")

        cursor2 = db.cursor()
        ref_nbr = '''SELECT COUNT (DISTINCT name) FROM users'''
        result_ref_nbr = cursor2.execute(ref_nbr)
        self.lbl_ref_nbr.setText(str(result_ref_nbr.fetchone()[0]))

    def Level(self):
        db = sqlite3.connect("database.db")
        cursor3 = db.cursor()

        command = '''SELECT id, name, data from users LIMIT 4'''

        result = cursor3.execute(command)

        self.table2.setRowCount(0)

        for row_number, row_data in enumerate(result):
            self.table2.insertRow(row_number)
            for column_number, data in enumerate(row_data):
                self.table2.setItem(row_number, column_number, QTableWidgetItem(str(data)))

        print("Выполнено")

    def New(self):
        db = sqlite3.connect("database.db")
        cursor = db.cursor()

        id = int(self.id1.toPlainText())
        name = self.name1.toPlainText()
        data = self.data1.toPlainText()
        dis = self.dis1.toPlainText()
        summ = self.summ1.toPlainText()

        command = '''INSERT INTO users (id, name, data, dis, summ) VALUES (?, ?, ?, ?, ?)'''

        result = cursor.execute(command, (id, name, data, dis, summ))

        self.tableWidget.setRowCount(0)

        for row_number, row_data in enumerate(result):
            pass

    def Del(self):
        selected_row = self.tableWidget.currentRow()
        if selected_row >= 0:
            db = sqlite3.connect("database.db")
            cursor = db.cursor()

            item_id = int(self.tableWidget.item(selected_row, 0).text())  # Assuming the first column contains the ID

            command = '''DELETE FROM users WHERE id = ?'''
            cursor.execute(command, (item_id,))

            db.commit()

            self.tableWidget.removeRow(selected_row)

            print("Запись удалена")
        else:
            print("Выберите запись для удаления")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Main()
    window.show()
    sys.exit(app.exec_())
from PyQt5.QtWidgets import *
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QApplication

import sys

from os import path

from PyQt5.uic import loadUiType

FROM_CLASS, _ = loadUiType(path.join(path.dirname('__file__'), "untitled.ui"))

import sqlite3

class Main(QMainWindow, FROM_CLASS):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        QMainWindow.__init__(self)
        self.setupUi(self)
        self.Handel_Buttons()

    def Handel_Buttons(self):
        self.search_2.clicked.connect(self.Get_Data)
        self.check.clicked.connect(self.Level)
        self.pushButton_5.clicked.connect(self.Update)
        self.pushButton_7.clicked.connect(self.New)
        self.pushButton_6.clicked.connect(self.Del)

    def Get_Data(self):
        db = sqlite3.connect("database.db")
        cursor = db.cursor()

        command = '''SELECT * from users'''

        result = cursor.execute(command)

        self.tableWidget.setRowCount(0)

        for row_number, row_data in enumerate(result):
            self.tableWidget.insertRow(row_number)
            for column_number, data in enumerate(row_data):
                self.tableWidget.setItem(row_number, column_number, QTableWidgetItem(str(data)))

        print("Выполнено")

        cursor2 = db.cursor()
        ref_nbr = '''SELECT COUNT (DISTINCT name) FROM users'''
        result_ref_nbr = cursor2.execute(ref_nbr)
        self.lbl_ref_nbr.setText(str(result_ref_nbr.fetchone()[0]))

    def Level(self):
        db = sqlite3.connect("database.db")
        cursor3 = db.cursor()

        command = '''SELECT id, name, data from users LIMIT 4'''

        result = cursor3.execute(command)

        self.table2.setRowCount(0)

        for row_number, row_data in enumerate(result):
            self.table2.insertRow(row_number)
            for column_number, data in enumerate(row_data):
                self.table2.setItem(row_number, column_number, QTableWidgetItem(str(data)))

        print("Выполнено")

    def New(self):
        db = sqlite3.connect("database.db")
        cursor = db.cursor()

        id = int(self.id1.toPlainText())
        name = self.name1.toPlainText()
        data = self.data1.toPlainText()
        dis = self.dis1.toPlainText()
        summ = self.summ1.toPlainText()

        command = '''INSERT INTO users (id, name, data, dis, summ) VALUES (?, ?, ?, ?, ?)'''

        result = cursor.execute(command, (id, name, data, dis, summ))

        self.tableWidget.setRowCount(0)

        for row_number, row_data in enumerate(result):
            pass

    def Del(self):
        selected_row = self.tableWidget.currentRow()
        if selected_row >= 0:
            db = sqlite3.connect("database.db")
            cursor = db.cursor()

            item_id = int(self.tableWidget.item(selected_row, 0).text())

            command = '''DELETE FROM users WHERE id = ?'''
            cursor.execute(command, (item_id,))

            db.commit()

            self.tableWidget.removeRow(selected_row)

            print("Запись удалена")
        else:
            print("Выберите запись для удаления")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Main()
    window.show()
    sys.exit(app.exec_())