Форум сайта python.su
Доброе утро. Вопрос для интереса. Каким методом подгрузки используете,если надо по текущей строке взять верхние 250строк и нижние 250строк всего 500? То есть допустим есть таблица в окне PyQt5 и загрузили часть данных из бд,когда достигаем конца таблицы,то очищаем таблицу и подгружаем следующие данные.В запрос ставим данные из последней строки таблицы,в бд находит эту строку и от этой строки берет верхние 250 и нижние 250 в порядке сортировки и загружаем эти 500строк в таблицу окна.
Я использую так,может есть еще какие то способы или этот способ популярный?:
#Вперед zapros_asc = cursor.execute(text_zaprosa_asc,(param)) for row_number,stroka in enumerate(zapros_asc): self.table.insertRow(row_number) for column_number,naim in enumerate(stroka): cell = QtWidgets.QTableWidgetItem(str(naim)) self.table.setItem(row_number,column_number,cell) #В обратном порядке zapros_desc = cursor.execute(text_zaprosa_desc,(param)) for row_number,stroka in enumerate(reversed(list(zapros_desc))): self.table.insertRow(row_number) for column_number,naim in enumerate(stroka): cell = QtWidgets.QTableWidgetItem(str(naim)) self.table.setItem(row_number,column_number,cell)
Отредактировано Ser5+ (Ноя. 20, 2019 09:53:10)
Офлайн
Доброе утро. Выявил в этой структуре проблему,которая выше в посте. При открытии программы загружаются данные в QTableWidget,все ок,но появилась проблема когда дохожу до конца списка чтобы подгрузить следующую подгрузку на 500строк и тут появляется странность, загрузилось первая которая по desc примерно 200строк а вторая по asc примерно 300,хотя в обеих запросах стоят лимиты на 250. В чем может быть проблема?Может надо по другому загружать данные из postgre в QTableWidget? Косяк скорее всего в этой конструкции.
Скорее всего косяк именно в обратном порядке.То есть наверно все равно читает вперед и reversed переворачивает просто,а мне надо чтобы назад читал в базе данных,то есть от текущей строки прочитать то что выше 250строк в такой сортировке в котором стоит.
Но все равно непонятно,так как вижу какие то данные ДО текущей строки после подгрузки и грузит в том порядке все верно,но почему то мало загрузил данных.
Отредактировано Ser5+ (Ноя. 20, 2019 10:29:11)
Офлайн
Для динамической подгруздки данных есть специальные методы fetchMore и canFetchMore. Но для их использование нужно отказаться от QTableWidget в пользу QTableView
Офлайн
Доброе утро. Все вопрос можно закрывать,моя ошибка была,я не добавил rpadы к параметрам.
Если кому надо,вкратце объясню. Краткий пример,если хотите подробнее узнать,пишите.
Когда в запросе есть rpadы например такое условие
yslovie_asc = 'where rpad(torg_naim,30)||rpad(lek_forma,100)||rpad(kolvo,10)||rpad(vlad,100) >= (?)'
POLE_TORG_NAIM = rpad(self.table.item(rowID,1).text(), 30) POLE_LEK_FORMA = rpad(self.table.item(rowID,2).text(), 100) POLE_KOLVO = rpad(self.table.item(rowID,5).text(), 10) POLE_VLAD = rpad(self.table.item(rowID,3).text(), 100) param = POLE_TORG_NAIM + POLE_LEK_FORMA + POLE_KOLVO + POLE_VLAD yslovie_asc = "where rpad(torg_naim,30)||rpad(lek_forma,100)||rpad(kolvo,10)||rpad(vlad,100) >= ('%s')" %param #Функция для добавления пробелов к строкам def rpad(ish_str, kol_probelov): probel=(' '+ ' ' ' ' ' ' ' ') itog_str=ish_str+probel return itog_str[0:kol_probelov]
Офлайн