Используя библиотеки QtSql, я пытаюсь загрузить данные в QTableView через QSqlTableModel; однако я не получаю данных в модели, когда вызываю метод select () модели:
from PyQt5.QtCore import Qt, QSize
from PyQt5.QtSql import *
from PyQt5.QtWidgets import QWidget, QTableView, QPushButton, QVBoxLayout
class SclDataBrowse(QWidget):
def __init__(self, parent=None):
super(SclDataBrowse, self).__init__(parent)
self.resize(336, 462)
self.setup_ui()
self.setup_db()
self.setup_model()
self.view.setModel(self.model)
if self.db.isOpen():
self.load_data()
def setup_ui(self):
self.layout = QVBoxLayout(self)
self.view = QTableView(self)
self.btn_New = QPushButton(self)
self.btn_New.setMinimumSize(QSize(70, 21))
self.btn_New.setMaximumSize(QSize(70, 21))
self.btn_New.setText('New')
self.layout.addWidget(self.view)
self.layout.addWidget(self.btn_New)
def setup_db(self):
self.db = QSqlDatabase("QMYSQL")
self.db.setHostName(myhost)
self.db.setUserName(myuser)
self.db.setPassword(mypassword)
self.db.setDatabaseName(mydb)
self.db.open()
def setup_model(self):
self.model = QSqlTableModel(self)
self.model.setTable("scldata")
self.model.setEditStrategy(QSqlTableModel.OnManualSubmit)
self.model.setHeaderData(0, Qt.Horizontal, 'ID')
self.model.setHeaderData(1, Qt.Horizontal, 'Foreign ID')
self.model.setHeaderData(2, Qt.Horizontal, 'Receipts Start')
self.model.setHeaderData(3, Qt.Horizontal, 'Receipts End')
self.model.setHeaderData(4, Qt.Horizontal, 'Billing Rate')
def load_data(self):
print('Loading Data')
self.model.select()
print(self.model.rowCount())
Что-то мне здесь не хватает?
self.db.open()
возвращает True
self.model.rowCount()
возвращает 0 строк. Проверено написание таблицы и наличие в ней данных.
Уже сделано - возвращено 5 рядов
выполнить: query = QSqlQuery() if query.exec_("select * from scldataselect"): print(query.size()) else: print("error: ", query.lastError().text())
Интересно: QSqlQuery::exec: database not open
Но я бы никогда не воспользовался этим методом, если бы база данных не была открыта.
вы должны выполнить его, вы должны открыть базу данных, например: load_data
Но я открыл базу данных в setup_db. Разве это не сохраняется?
Вы добавили его в конец setup_db?, Пожалуйста, будьте точны в своих комментариях, например, я не знаю, где вы выполняете то, что я вам указал.
Добавлен в конец setup_db (это в коде, который я опубликовал). Также интересно: переместил self.db.open () в метод load_data (), и я получаю новую ошибку: Driver not loaded Driver not loaded
проверьте ваше соединение, сделайте простое соединение
Не уверен, что вы имеете в виду под простым подключением
Я изменил ваш код с query=QSqlQuery()
на query=QSqlQuery(self.db)
, и query.size()
сообщил правильное количество возвращенных строк. Однако это все еще не решает мою первоначальную проблему.
добавьте self.model.select()
после self.model.setTable("scldata")
и прокомментируйте строки, начинающиеся с: self.model.setHeaderData...
Нашел проблему. Похоже, мне нужно передать базу данных на QSqlTableModel(self,self.db).
какой вывод
print(self.db.open())
?