Запрос на последнюю строчку определенного столбца
В классе TestWindow есть счетчик который отправляет результат в таблицу в колонку Результат. В классе EndTestWindow пишу запрос на выдачу результата из БД но выдается только 1 вместо реального результата. Во втором варианте добавил self.cursor.fetchall() Теперь постоянно пишет Результат': 'None' хотя на самом деле это не так
SELECT * FROM students ORDER BY Результат DESC LIMIT 1
Такой запрос пишет ошибку на =%s
SELECT * FROM students WHERE Результат =%s
TestWindow
class TestWindow(QtWidgets.QMainWindow, Ui_Test):
def __init__(self):
super(TestWindow, self).__init__()
self.setupUi(self)
self.connection = pymysql.connect(
host=host,
port=3306,
user=user,
password=password,
database=db_name,
cursorclass=pymysql.cursors.DictCursor
)
self.cursor = self.connection.cursor()
self.pushButtonEndTest.clicked.connect(self.openEndTestWindow)
self.pushButtonEndTest.clicked.connect(self.Resylt)
def Resylt(self):
self.res = 0
if self.comboBox.currentIndex() == self.kk_1:
self.res = self.res+1
if self.comboBox_2.currentIndex() == self.kk_2:
self.res = self.res+1
if self.comboBox_3.currentIndex() == self.kk_3:
self.res = self.res+1
if self.comboBox_4.currentIndex() == self.kk_4:
self.res = self.res+1
if self.comboBox_5.currentIndex() == self.kk_5:
self.res = self.res+1
print("Количество верных ответов - " + str(self.res))
self.cursor.execute(f"UPDATE students SET Результат = '{self.res}' ORDER BY id DESC LIMIT 1")
self.connection.commit()
def openEndTestWindow(self):
self.EndTest = EndTestWindow()
self.close()
self.EndTest.show()
EndTestWindow
class EndTestWindow(QtWidgets.QMainWindow, Ui_EndTest):
def __init__(self):
super(EndTestWindow, self).__init__()
self.setupUi(self)
self.connection = pymysql.connect(
host=host,
port=3306,
user=user,
password=password,
database=db_name,
cursorclass=pymysql.cursors.DictCursor
)
self.cursor = self.connection.cursor()
# ozenka = self.cursor.execute("SELECT * FROM students WHERE Результат =%s")
ozenka = self.cursor.execute("SELECT * FROM students ORDER BY id DESC LIMIT 1")
self.connection.commit()
self.label_2.setText("Ваша оценка "+ (str(ozenka)) + " из 5")
self.Button_startMain.clicked.connect(self.openToMain)
def openToMain(self):
self.close()
w.show()
Второй вариант EndTestWindow
class EndTestWindow(QtWidgets.QMainWindow, Ui_EndTest):
def __init__(self):
super(EndTestWindow, self).__init__()
self.setupUi(self)
self.connection = pymysql.connect(
host=host,
port=3306,
user=user,
password=password,
database=db_name,
cursorclass=pymysql.cursors.DictCursor
)
self.cursor = self.connection.cursor()
self.cursor.execute("SELECT Результат FROM students ORDER BY id DESC LIMIT 1")
# ozenka = self.cursor.execute("SELECT Результат FROM students ORDER BY id DESC LIMIT 1")
ozenka = self.cursor.fetchall()
self.connection.commit()
self.label_2.setText("Ваша оценка "+ (str(ozenka)) + " из 5")
# ozenka = self.cursor.execute("SELECT Результат FROM students ORDER BY id DESC LIMIT 1")
# # ozenka = self.cursor.execute("SELECT Результат FROM students ORDER BY id DESC LIMIT 1")
# self.connection.commit()
# self.label_2.setText("Ваша оценка "+ (str(ozenka)) + " из 5")
self.Button_startMain.clicked.connect(self.openToMain)
def openToMain(self):
self.close()
w.show()
Ответы (1 шт):
Автор решения: Pr0gramm1st
→ Ссылка
Надо сортировать по столбцу id, чтобы последний элемент стал первым. Вот так должно сработать:
SELECT * FROM students ORDER BY id DESC LIMIT 1

