python - 错误 : "Driver not loaded" in PyQt5

标签 python mysql pyqt pyqt5

我要将 PyQt5 连接到 MySQL。不幸的是,我收到错误消息“未加载驱动程序”。 Python 说驱动程序在里面:

from PyQt5.QtSql import QSqlDatabase
print(list(map(str, QSqlDatabase.drivers())))

答案:['QSQLITE', 'QMYSQL', 'QMYSQL3', 'QODBC', 'QODBC3', 'QPSQL', 'QPSQL7'] 我使用 Windows 7 并安装了 Qt Designer

这是我的代码:

from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel
from PyQt5.QtWidgets import QTableView, QApplication
import sys
app = QApplication(sys.argv)
db = QSqlDatabase.addDatabase('QMYSQL')
db.setHostName('****')
db.setDatabaseName('****')
db.setUserName('****')
db.setPassword('****')
ok = db.open()
if not ok: print(db.lastError().text())
else: print("connected")
query = QSqlQuery(db);
query.exec_('SELECT * FROM tbl_Customers');

谁有这方面的经验。非常感谢

最佳答案

问题出在应用程序启动过程中。对于 PyQt,您需要先启动一个 GUI 应用程序,然后才能实际使用它下面的类。要记住的另一件事是,始终尝试查看实际错误。在您的情况下,您正在强制使用 lastError() 方法并在此之前遗漏了一些有值(value)的点。您只看到了 Driver not loaded 错误。但是之前那个终端还显示了QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins这个错误,清楚的说明了找不到驱动的真正原因。

要制作 QCoreApplication,您需要在代码中添加它 -

if __name__ == '__main__':
   app = QApplication(sys.argv)

所以你的代码可以是 -

from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel
from PyQt5.QtWidgets import QTableView, QApplication
import sys


def dbcon():
    db = QSqlDatabase.addDatabase('QMYSQL')
    db.setHostName('****')
    db.setDatabaseName('****')
    db.setUserName('****')
    db.setPassword('****')
    ok = db.open()
    if not ok: print(db.lastError().text())
    # else: print("connected")
    query = QSqlQuery(db)
    query.exec_('SELECT * FROM tbl_Customers')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    dbcon()

我已经用 SQlite 数据库做了一个示例,因为我没有配置 MySql。演示 -

from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel
from PyQt5.QtWidgets import QTableView, QApplication, QMessageBox


def createDB():
    db = QSqlDatabase.addDatabase('QSQLITE')
    db.setDatabaseName('sports.db')
    if not db.open():
        QMessageBox.critical(None, ("Cannot open database"),
                                   ("Unable to establish a database connection.\n"
                                                 "This example needs SQLite support. Please read "
                                                 "the Qt SQL driver documentation for information "
                                                 "how to build it.\n\n"
                                                 "Click Cancel to exit."),
                                   QMessageBox.Cancel)
    return False

    query = QtSql.QSqlQuery()
    query.exec_("create table sportsmen(id int primary key, "
                "firstname varchar(20), lastname varchar(20))")
    query.exec_("insert into sportsmen values(101, 'Roger', 'Federer')")
    query.exec_("insert into sportsmen values(102, 'Christiano', 'Ronaldo')")
    query.exec_("insert into sportsmen values(103, 'Ussain', 'Bolt')")
    query.exec_("insert into sportsmen values(104, 'Sachin', 'Tendulkar')")
    query.exec_("insert into sportsmen values(105, 'Saina', 'Nehwal')")
    return True


if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    createDB()

关于python - 错误 : "Driver not loaded" in PyQt5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49109326/

相关文章:

python - 数字 : How can I improve this code to find the number of divisors of big numbers? 的除数

mysql - 比较表 MYSQL 的行并输出差异

php - 如何更新 mysql 数据库 WHERE value = PHP 数组中的值?

python - 如何在 PyQt 中嵌入 scikitplot?

python - 单击事件清除 QLineEdit

python - django抽象模型继承导入

python - 将内容传递给 Python 中另一个模块的函数

python - 如何使用 Python 加密大文件?

mysql - 有什么方法可以优化此MySQL查询吗? (资源密集)

python - 如何在 PyQt 中创建自定义形状 QPushBtn