Найти - Пользователи
Полная версия: Подгрузка данныз из БД
Начало » Базы данных » Подгрузка данныз из БД
1
Ser5+
Доброе утро. Вопрос для интереса. Каким методом подгрузки используете,если надо по текущей строке взять верхние 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+
Доброе утро. Выявил в этой структуре проблему,которая выше в посте. При открытии программы загружаются данные в QTableWidget,все ок,но появилась проблема когда дохожу до конца списка чтобы подгрузить следующую подгрузку на 500строк и тут появляется странность, загрузилось первая которая по desc примерно 200строк а вторая по asc примерно 300,хотя в обеих запросах стоят лимиты на 250. В чем может быть проблема?Может надо по другому загружать данные из postgre в QTableWidget? Косяк скорее всего в этой конструкции.
Скорее всего косяк именно в обратном порядке.То есть наверно все равно читает вперед и reversed переворачивает просто,а мне надо чтобы назад читал в базе данных,то есть от текущей строки прочитать то что выше 250строк в такой сортировке в котором стоит.
Но все равно непонятно,так как вижу какие то данные ДО текущей строки после подгрузки и грузит в том порядке все верно,но почему то мало загрузил данных.
Rodegast
Для динамической подгруздки данных есть специальные методы fetchMore и canFetchMore. Но для их использование нужно отказаться от QTableWidget в пользу QTableView
Ser5+
Доброе утро. Все вопрос можно закрывать,моя ошибка была,я не добавил 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]

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

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB