Ошибка AttributeError: 'tuple' object has no attribute 'values'

У меня было написано приложение на MySQL, решил переделать его на SQLite 3. Столкнулся с такой ошибкой, в результатах после нажатия кнопки показать результаты ошибка:

Traceback (most recent call last):  
  File "c:\main1.py", line 76, in openresyltati
    id, fio, grup, rez = row.values()
AttributeError: 'tuple' object has no attribute 'values'**

main.py

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QLabel, QLineEdit, QGridLayout, QMessageBox, QVBoxLayout)
from titul import Ui_mainWindow
from resyltati import Ui_ResyltTest
import sqlite3
import random
from PyQt5.QtGui import QPixmap
from config import host, user, password, db_name

class MainWindow(QtWidgets.QMainWindow, Ui_mainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)

        self.connection = sqlite3.connect( 'diplom.db')
        self.cursor = self.connection.cursor()


        self.Button_Rezylt.clicked.connect(self.openResyltati)


    def openResyltati(self):
        
        self.resyltati = ResyltatiWindow(self.connection)
        self.close()
        self.resyltati.show()



class ResyltatiWindow(QtWidgets.QMainWindow, Ui_ResyltTest):
    def __init__(self, connection):
        super(ResyltatiWindow, self).__init__()
        self.setupUi(self)
        self.connection = connection
        self.cursor = self.connection.cursor()
        self.cursor.execute("SELECT * FROM students ")
        self.connection.commit()
        self.pushButtontomain_2.clicked.connect(self.openresyltati)
        self.pushButtontomain.clicked.connect(self.returnToMain)

    def openresyltati(self):
        rows = self.cursor.fetchall()
        for row in rows:                                           
            id, fio, grup, rez = row.values()                        
            if fio and grup and rez:                                
                self.textEdit.append(                                 
                    f'{id:>3} | {fio:>40} | {grup:>10} | {rez:>3}'     
                ) 

    def returnToMain(self):
        self.close()
        w.show()





if __name__ == "__main__":

    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
  

titul.py


from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_mainWindow(object):
    def setupUi(self, mainWindow):
        mainWindow.setObjectName("mainWindow")
        mainWindow.resize(1100, 800)
        mainWindow.setStyleSheet("background-color: rgb(255, 255, 255);")
        mainWindow.setAnimated(True)
        self.centralwidget = QtWidgets.QWidget(mainWindow)
        self.centralwidget.setAutoFillBackground(False)
        self.centralwidget.setObjectName("centralwidget")
        self.Button_runLR = QtWidgets.QPushButton(self.centralwidget)
        self.Button_runLR.setGeometry(QtCore.QRect(400, 310, 271, 81))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(14)
        self.Button_runLR.setFont(font)
        self.Button_runLR.setStyleSheet("background-color: rgb(227, 210, 255);")
        self.Button_runLR.setObjectName("Button_runLR")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(0, 0, 1101, 801))
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("images.jpg"))
        self.label.setScaledContents(True)
        self.label.setObjectName("label")
        self.Button_startTest = QtWidgets.QPushButton(self.centralwidget)
        self.Button_startTest.setGeometry(QtCore.QRect(400, 530, 271, 81))
        font = QtGui.QFont()
        font.setFamily("Tahoma")
        font.setPointSize(14)
        self.Button_startTest.setFont(font)
        self.Button_startTest.setStyleSheet("background-color: rgb(227, 210, 255);")
        self.Button_startTest.setObjectName("Button_startTest")
        self.Button_Rezylt = QtWidgets.QPushButton(self.centralwidget)
        self.Button_Rezylt.setGeometry(QtCore.QRect(400, 420, 271, 81))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(14)
        self.Button_Rezylt.setFont(font)
        self.Button_Rezylt.setStyleSheet("background-color: rgb(227, 210, 255);")
        self.Button_Rezylt.setObjectName("Button_Rezylt")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(350, 100, 381, 51))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(14)
        self.label_2.setFont(font)
        self.label_2.setStyleSheet("background-color: rgb(227, 210, 255);")
        self.label_2.setObjectName("label_2")
        self.label.raise_()
        self.Button_runLR.raise_()
        self.Button_startTest.raise_()
        self.Button_Rezylt.raise_()
        self.label_2.raise_()
        mainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(mainWindow)
        QtCore.QMetaObject.connectSlotsByName(mainWindow)

    def retranslateUi(self, mainWindow):
        _translate = QtCore.QCoreApplication.translate
        mainWindow.setWindowTitle(_translate("mainWindow", "Главная"))
        self.Button_runLR.setText(_translate("mainWindow", "Начать лабораторную \n"
"работу"))
        self.Button_startTest.setText(_translate("mainWindow", "Начать тест"))
        self.Button_Rezylt.setText(_translate("mainWindow", "Посмотреть результаты"))
        self.label_2.setText(_translate("mainWindow", "Изучение этапов преобразования биосигналов"))

resyltati.py


from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_ResyltTest(object):
    def setupUi(self, ResyltTest):
        ResyltTest.setObjectName("ResyltTest")
        ResyltTest.resize(1100, 800)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(14)
        ResyltTest.setFont(font)
        ResyltTest.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.centralwidget = QtWidgets.QWidget(ResyltTest)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(0, 0, 1111, 811))
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("Resyl.jpg"))
        self.label.setScaledContents(True)
        self.label.setObjectName("label")
        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
        self.scrollArea.setGeometry(QtCore.QRect(330, 110, 471, 611))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(14)
        self.scrollArea.setFont(font)
        self.scrollArea.setStyleSheet("background-color: rgb(213, 223, 255);")
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 469, 609))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.textEdit = QtWidgets.QTextEdit(self.scrollAreaWidgetContents)
        self.textEdit.setGeometry(QtCore.QRect(0, 0, 471, 611))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(14)
        self.textEdit.setFont(font)
        self.textEdit.setObjectName("textEdit")
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.pushButtontomain = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtontomain.setGeometry(QtCore.QRect(230, 730, 211, 51))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(14)
        self.pushButtontomain.setFont(font)
        self.pushButtontomain.setStyleSheet("background-color: rgb(212, 212, 212);")
        self.pushButtontomain.setObjectName("pushButtontomain")
        self.pushButtontomain_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtontomain_2.setGeometry(QtCore.QRect(700, 730, 211, 51))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(14)
        self.pushButtontomain_2.setFont(font)
        self.pushButtontomain_2.setStyleSheet("background-color: rgb(212, 212, 212);")
        self.pushButtontomain_2.setObjectName("pushButtontomain_2")
        ResyltTest.setCentralWidget(self.centralwidget)
        self.retranslateUi(ResyltTest)
        QtCore.QMetaObject.connectSlotsByName(ResyltTest)

    def retranslateUi(self, ResyltTest):
        _translate = QtCore.QCoreApplication.translate
        ResyltTest.setWindowTitle(_translate("ResyltTest", "Результаты"))
        self.textEdit.setHtml(_translate("ResyltTest", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'Times New Roman\'; font-size:14pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"> № |             ФИО                               |   Группа    |  Оценка</p></body></html>"))
        self.pushButtontomain.setText(_translate("ResyltTest", "Вернуться назад"))
        self.pushButtontomain_2.setText(_translate("ResyltTest", "Показать результат"))

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Tiger Shark

Решил это так:

Было:

class ResyltatiWindow(QtWidgets.QMainWindow, Ui_ResyltTest):
    def __init__(self, connection):
        super(ResyltatiWindow, self).__init__()
        self.setupUi(self)
        self.connection = connection
        self.cursor = self.connection.cursor()

    
        self.cursor.execute("SELECT * FROM students ")
        self.connection.commit()

        self.pushButtontomain_2.clicked.connect(self.openresyltati)
        self.pushButtontomain.clicked.connect(self.returnToMain)


    def openresyltati(self):
        rows = self.cursor.fetchall()
        for row in rows:                                           
            id, fio, grup, rez = row.values()                        
            if fio and grup and rez:                                
                self.textEdit.append(                                 
                    f'{id:>3} | {fio:>40} | {grup:>10} | {rez:>3}'     
                ) 

Стало:

class ResyltatiWindow(QtWidgets.QMainWindow, Ui_ResyltTest):
    def __init__(self):
        super(ResyltatiWindow, self).__init__()
        self.setupUi(self)

        self.connection = sqlite3.connect( 'diplom.db')
        self.cursor = self.connection.cursor()

    
        self.cursor.execute("SELECT * FROM 'students' ")
        self.connection.commit()

        self.pushButtontomain_2.clicked.connect(self.resylt)
        self.pushButtontomain.clicked.connect(self.returnToMain)


    def resylt(self):
        return [
            self.textEdit.append(f" {value[0]}    {value[1]}         {value[2]}")
            for value in self.cursor.execute("SELECT * FROM 'students'").fetchall()
        ]       

→ Ссылка