В QTableView не отображаются данные из таблицы базы MySQL
Данные из таблицы читаю, в таблицу пишу.
Qt Designer 5.11, Python 3.12.
Буду благодарен за подсказку!
from PyQt6 import QtWidgets
from PyQt6.QtWidgets import QApplication, QMainWindow
from PyQt6.QtSql import QSqlTableModel
from mysql.connector import connect, Error
import pymysql
import pymysql.cursors
from test_nt import Ui_MainTestNT
class nntt (QMainWindow):
def __init__ (self):
super(nntt, self).__init__()
self.ui = Ui_MainTestNT()
self.ui.setupUi(self)
self.view_data()
# Соединение с БД
try:
connection = pymysql.connect(
host="localhost",
port=3306,
user="hd_main",
password="********",
database="hdoh_db",
cursorclass=pymysql.cursors.DictCursor
)
# Проверка соединения с БД
print ("OK")
except Error as e:
print(e)
# Отображение исходных данных
def view_data(self):
self.model = QSqlTableModel(self)
self.model.setTable("new_table")
self.model.select()
self.ui.tableView.setModel(self.model)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = nntt()
window.show()
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: Allito
→ Ссылка
У вас же не заданы настройки для подключения к серверу MySQL. В блоке try - except вы проверяете соединение с сервером с помощью pymysql.connect, при этом у блока отступы неверные - он не запускается в init (при создании объекта). И вам необходимо использовать QSqlDatabase для подключения к базе. Например так:
con = QSqlDatabase.addDatabase("QMYSQL/MARIADB")
con.setDatabaseName(name)
con.setHostName(host)
con.setUserName(username)
con.setPassword(password) # хотя этот вариант небезопасный
Доступно описано здесь https://is20-2019.susu.ru/utkinaea/2021/03/15/obrabotka-baz-dannyh-sql-s-pomoshhyu-pyqt-osnovy/#id16