PySide2 и MySQL не могу подключиться для отображения таблицы из базы данных

Не получается отобразить таблицу из удаленной базы данных QTableView с помощью QSqlTableModel (я так понял что не проходит само подключение к базе). Есть вот такой код, который не работает, не могу понять в чем проблема...

import sys

from PySide2.QtCore import QSize
from PySide2.QtSql import QSqlDatabase, QSqlTableModel
from PySide2.QtWidgets import QApplication, QMainWindow, QTableView

db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("server167.hosting.reg.ru")
db.setDatabaseName("db")
db.setUserName("<user name>")
db.setPassword("<password>")
db.open()

print(db, type(db))
if db.open():
    print("Database Open!")
else:
    print("Database NOT Open!")




class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.table = QTableView()

        self.model = QSqlTableModel(db=db)

        self.table.setModel(self.model)

        self.model.setTable("objects")
        self.model.select()

        self.setMinimumSize(QSize(1024, 600))
        self.setCentralWidget(self.table)


app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

Данные подключения 100 раз проверил, так как код по заполнению таблицы 100 % выполняется, я бы мог конечно коннектор все забирать, но очень хочется средствами Qt =) Код заполнения таблицы базы данных:

import mysql.connector as mysql

mysql_conn = mysql.connect(
    host='server167.hosting.reg.ru',
    user='u1082920_root',
    password='1501kZn1501!',
    database = 'u1082920_docs_db'
)

with mysql_conn as connection:
    cursor = connection.cursor()
    cursor.execute("""DROP TABLE IF EXISTS objects""")
    cursor.execute("""CREATE TABLE objects(id INTEGER PRIMARY KEY, data TEXT NOT NULL,
                                            plan TEXT NOT NULL, name_plan TEXT NOT NULL)""")
    # # SQL запрос на вставку
    query = f"INSERT INTO objects (id, data,plan,name_plan) VALUES ('{1}', '{str(2)}', '{str(3)}', '{str(4)}')"
    cursor.execute(query)
    query = f"INSERT INTO objects (id, data,plan,name_plan) VALUES ('{2}', '{str(2)}', '{str(3)}', '{str(4)}')"
    cursor.execute(query)

    connection.commit()
    connection.close()

Ответы (2 шт):

Автор решения: Sergey Tatarincev

А зачем два раза db.open()?

Проверьте подключение к БД

from PySide2.QtSql import QSqlError
if db.open():
    print("Database Open!")
else:
    print(f"Database NOT Open cause {db.lastError().text()}")

очень сильно подозреваю что будет ошибка QSqlDatabase: QMYSQL driver not loaded. см https://stackoverflow.com/questions/64056483/unable-to-load-qmysql-driver-on-pyside2

→ Ссылка
Автор решения: Konstantin

Штука была именно в отсутствии драйвера QMYSQL (спасибо Sergey Tatarincev). Наиболее приемлемым для себя нашел выход в установке уже готовых драйверов (знаний для их самостоятельной сборки, пусть и по инструкции у меня не хватает).

спасибо добрый человек выкладывает готовые драйвера (например QMYSQL driver 5.15.2)

С простой инструкцией по установке (приведу ее тут, так как она на мой взгляд не очень очевидно в репозитории лежит):

Развертывани­е

  1. поместите qsqlmysql.dl­l (если сборка выпуска) / qsqlmysqld.d­ll (если сборка отладки, но обратите внимание, что при использовани­и MinGW 8.1.0 или более поздней версии сборка отладки также называется qsqlmysql.dl­l) в подкаталог приложения «sqldrivers»
  2. поместите libmysql.dll (сама библиотека MySQL) и библиотеки OpenSSL v1.1, libcrypto-1_1 и libssl-1_1, в каталог вашего приложения

В принципе после этих всё заработало =)

→ Ссылка