@pypyshka

Как максимально быстро загрузить данные из БД sqlite в QTableView?

Добрый день.

Есть необходимость выгружать в таблицу большие объемы данных, для этого делаю так:
db_connect = QtSql.QSqlDatabase.addDatabase("QSQLITE")
db_connect.setDatabaseName("database.db")
db_connect.open()
model = QtSql.QSqlQueryModel(parent=window)
model.setQuery("SELECT id, num, data FROM table")
window.tableView.setModel(model)

Загрузка таблицы из нескольких тысяч строк происходит, в принципе, быстро. Но пришлось сделать некоторые ячейки в таблице редактируемыми. Поэтому решил использовать модель QStandardItemModel:
db_connect = sqlite3.connect("database.db")
cur = db_connect.cursor()
cur.execute("SELECT id, num, data FROM table")
content = cur.fetchall()
row_count = len(content)
db_connect.commit()
cur.close()
db_connect.close()
model = QtGui.QStandardItemModel()

lst1 = []
lst2 = []
lst3 = []

for i in content:
    lst1.append(i[0])
    lst2.append(i[1])
    lst3.append(i[2])

for i in range(0, row_count):
    item1 = QtGui.QStandardItem(lst1[i])
    item2 = QtGui.QStandardItem(lst2[i])
    item3 = QtGui.QStandardItem(lst3[i])

model.appendRow([item1, item2, item3])
item1.setEditable(False)
window.tableView.setModel(model)

Но такой способ требует много времени для загрузки данных в таблицу (я так понимаю это из-за циклов for). Есть ли какой-нибудь способ максимально быстро загрузить данные в таблицу, при этом оставить возможность редактирования? Спасибо.
  • Вопрос задан
  • 1434 просмотра
Решения вопроса 1
@pypyshka Автор вопроса
В общем, попробовал создать модель на основе QAbstractTableModel. Не знаю как точно по скорости, но данные зрительно загружаются в tableView быстрее, чем при использовании QStandardItemModel. А работать с данным и с самой таблицей теперь стало легче.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы