Yve*_*ves 5 python mysql pyqt pyqt5
我即将把PyQt5连接到MySQL.不幸的是我收到错误'Driver not loaded'.Python说驱动程序内部:
from PyQt5.QtSql import QSqlDatabase
print(list(map(str, QSqlDatabase.drivers())))
Run Code Online (Sandbox Code Playgroud)
答:['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');
Run Code Online (Sandbox Code Playgroud)
谁有经验.非常感谢你
问题出在应用程序启动过程中。对于 PyQt,您需要先启动 GUI 应用程序,然后才能实际使用其下的类。另一件要记住的事情是,始终尝试查看实际的错误。就您而言,您正在强制采用一种lastError()方法,并在此之前错过了一些有价值的要点。您只关注Driver not loaded错误。但在此之前,终端也显示了QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins此错误,这清楚地表明了找不到驱动程序的实际原因。
要创建 QCoreApplication,您需要将其添加到代码中 -
if __name__ == '__main__':
app = QApplication(sys.argv)
Run Code Online (Sandbox Code Playgroud)
所以你的代码可以是 -
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()
Run Code Online (Sandbox Code Playgroud)
我用 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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1784 次 |
| 最近记录: |