Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 19, 2019 09:28:04

Ser5+
Зарегистрирован: 2019-11-18
Сообщения: 65
Репутация: +  1  -
Профиль   Отправить e-mail  

Подгрузка данныз из БД

Доброе утро. Вопрос для интереса. Каким методом подгрузки используете,если надо по текущей строке взять верхние 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)

Офлайн

#2 Ноя. 20, 2019 09:46:02

Ser5+
Зарегистрирован: 2019-11-18
Сообщения: 65
Репутация: +  1  -
Профиль   Отправить e-mail  

Подгрузка данныз из БД

Доброе утро. Выявил в этой структуре проблему,которая выше в посте. При открытии программы загружаются данные в QTableWidget,все ок,но появилась проблема когда дохожу до конца списка чтобы подгрузить следующую подгрузку на 500строк и тут появляется странность, загрузилось первая которая по desc примерно 200строк а вторая по asc примерно 300,хотя в обеих запросах стоят лимиты на 250. В чем может быть проблема?Может надо по другому загружать данные из postgre в QTableWidget? Косяк скорее всего в этой конструкции.
Скорее всего косяк именно в обратном порядке.То есть наверно все равно читает вперед и reversed переворачивает просто,а мне надо чтобы назад читал в базе данных,то есть от текущей строки прочитать то что выше 250строк в такой сортировке в котором стоит.
Но все равно непонятно,так как вижу какие то данные ДО текущей строки после подгрузки и грузит в том порядке все верно,но почему то мало загрузил данных.

Отредактировано Ser5+ (Ноя. 20, 2019 10:29:11)

Офлайн

#3 Ноя. 20, 2019 15:22:22

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Подгрузка данныз из БД

Для динамической подгруздки данных есть специальные методы fetchMore и canFetchMore. Но для их использование нужно отказаться от QTableWidget в пользу QTableView



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Ноя. 22, 2019 09:31:01

Ser5+
Зарегистрирован: 2019-11-18
Сообщения: 65
Репутация: +  1  -
Профиль   Отправить e-mail  

Подгрузка данныз из БД

Доброе утро. Все вопрос можно закрывать,моя ошибка была,я не добавил 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]

И тогда подгрузка будет верной,то есть когда берем текущую строку и он встанет на нужную строку в бд,но обязательно в бд должен быть индекс

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version