@vlad758

Как можно оптимизировать ход выполнения функции?

Подскажите, в чем может быть причина долгого выполнения данной функции? В таблице 640 строк на 17 столбцов.. Выполняется функция за 15 секунд, что как-то не очень приятно..

with sq.connect(f"direction_db/{lg_hash_dir}/{direction_db_list}.db") as con:
            cur = con.cursor()
            colums_of_table = cur.execute("SELECT * FROM direction_db").fetchall()

            colums_of_table_len_col = len(colums_of_table[0]) - 1
            colums_of_table_len_row = len(colums_of_table) - 1

            self.ui.tableWidget.setColumnCount(colums_of_table_len_col)
            self.ui.tableWidget.setRowCount(colums_of_table_len_row)
            self.ui.progressBar.show()

            for row in range(2, colums_of_table_len_row + 2):
                value_bar = (row / (colums_of_table_len_row + 2)) * 100
                self.ui.progressBar.setValue(value_bar)
                for col in range(1, colums_of_table_len_col + 1):
                    item_db = cur.execute("SELECT * FROM direction_db WHERE id=(%s)" % row).fetchone()
                    k_table = row - 2
                    c_table = col - 1
                    item_list_db = str(item_db[col])
                    if item_list_db == '-':
                        item_list_db = ''
                    if item_list_db == 'None':
                        item_list_db = ''
                    self.ui.tableWidget.setItem(k_table, c_table, QTableWidgetItem(item_list_db))

                self.ui.progressBar.hide()

            item_db_label = cur.execute("SELECT * FROM direction_db WHERE id=1").fetchone()
            item_db_lb = item_db_label

            col_table_name = list()
            for i in range(1, colums_of_table_len_col + 1):
                col_tab = item_db_lb[i]
                col_tb = str(col_tab)
                col_table_name.append(col_tb)
            for i in col_table_name:
                if i == 'None':
                    ix_none = col_table_name.index('None')
                    col_table_name.pop(ix_none)
                    col_table_name.insert(ix_none, '')

            self.ui.tableWidget.setHorizontalHeaderLabels(col_table_name)
            self.ui.tableWidget.resizeColumnsToContents()
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
@twistfire92
Python backend developer
Если не вдаваться в суть того, что делает код, то вы тут запускаете запросы в цикле, в итоге у вас 640*17 запросов, что и тормозит все.
Причем, если правильно понимаю, вы уже получили все данные из таблицы, а потом запрашиваете их еще раз построчно. Вообще неясно зачем.
Попробуйте строку
item_db = cur.execute("SELECT * FROM direction_db WHERE id=(%s)" % row).fetchone()

поднять на уровень выше, до цикла for row in range(2....
а то делаете один и тот же запрос по 17 раз, смысла от которого нет.

Но в идеале от этого запроса в цикле вообще можно и нужно избавиться
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы