Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Оптимизация кода Python: stroka = stroka + str(line) + '\n' в цикле долго работает

#python #sqlite #производительность


Имеется следующий кусок кода, который берет данные из базы-данных SQLite, затем загружает
их (в виде текста) в клиентское приложение, но к сожалению загрузка данных работает
очень уж долго, как сделать быстрее?       

results = c.execute(select).fetchall()

stroka = ''
for line in results:
    stroka = stroka + str(line) + '\n'

self.ui.textEdit.setText(stroka)

    


Ответы

Ответ 1



Предлагаю оптимизировать составление текста через замену конкантенации строк на join: text = '\n'.join([str(line) for line in results]) или так: text = '\n'.join(map(str, results))

Ответ 2



Можно сделать это на стороне SQLite. Пример: sqlite> select * from tab; s ---------- 111 222 333 sqlite> select group_concat(s,'') from tab; group_concat(s,'') ------------------ 111222333 sqlite> select group_concat(s,'\n') from tab; group_concat(s,'\n') -------------------- 111\n222\n333 в следующем варианте возвращается одна строка: sqlite> select group_concat(s,char(10)) from tab; group_concat(s,char(10)) ------------------------ 111 222 333 Спасибо @jfs за код для Python: [[result]] = db.execute("select group_concat(s, '\n') from tab") PS данный вариант имеет O(n) по времени выполнения

Комментариев нет:

Отправить комментарий