python - 尝试使用 python 3.7 (x64) 连接到 pyqt5 中的 SQL 数据库时出现“未加载驱动程序”
问题描述
我尝试将旧的 pyqt4 程序转换为 pyqt5 并更改为 python x64。
第一次查询数据库时,出现“未加载驱动程序”错误。
当我使用 mysql.connector.connect 时,我可以毫无问题地从数据库中获取数据。
我在过去的四个晚上尝试解决这个问题,目前,不知道更多。
我尝试过的事情:
- 安装qt
- 安装 32 位 python
- 下载包含pyqt的winpython
- 卸载系统上的所有python并重新安装
- 安装 mysql / 和连接器
- 尝试过的蟒蛇
我相信我的问题之一是 print(QtSql.QSqlDatabase.drivers()) 只给了我: ['QSQLITE', 'QODBC', 'QODBC3', 'QPSQL', 'QPSQL7']
在相应的文件夹中(据我了解)“C:\Python37\Lib\site-packages\PyQt5\Qt\plugins\sqldrivers”只有以下三个文件:qsqlite.dll,qsqlodbc.dll,qsqlpsql.dll
我从https://raw.githubusercontent.com/pyqt/python-qt5/master/PyQt5/plugins/sqldrivers/下载了 qsqlmysql.dll 文件,之后用 print(QtSql.QSqlDatabase .drivers()) ,但是有了这个文件,我的 python 崩溃了。
接下来我可以尝试什么?我做错了什么?
数据库是“服务器版本:5.5.57-MariaDB - MariaDB 服务器”
from PyQt5 import QtCore, QtGui, QtWidgets, uic, QtSql
from PyQt5.QtSql import (QSql, QSqlDatabase, QSqlDriver,
QSqlDriverCreatorBase, QSqlError, QSqlField, QSqlIndex, QSqlQuery,
QSqlQueryModel, QSqlRecord, QSqlRelation, QSqlRelationalDelegate,
QSqlRelationalTableModel, QSqlResult, QSqlTableModel)
class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
self.db_connection = QSqlDatabase.database()
print(QtSql.QSqlDatabase.drivers())
self.db_connection = QSqlDatabase.addDatabase("QMYSQL")
self.db_connection.setHostName(db_sql_server_ip)
self.db_connection.setDatabaseName(db_db_name)
self.db_connection.setUserName(db_user)
self.db_connection.setPassword(db_pw)
self.db_connection.setPort(int(db_sql_server_port))
self.db_connection.setConnectOptions("MYSQL_OPT_RECONNECT=1")
# first function which will get sql data
query = QSqlQuery()
# for demonstration
self.setting_name='123'
query.prepare("SELECT name,settings_value,pickled_data FROM settings WHERE user_id = ? AND active='1' AND name = ?")
query.addBindValue(_user_id)
query.addBindValue(self.setting_name)
query_status = query.exec_()
if query_status is not True:
errorText = query.lastError().text()
QtWidgets.QMessageBox.critical(self, 'Query error', errorText + str(57))
没有qt的代码可以访问sql:
# the following works, but I need qt..
import mysql.connector
db = mysql.connector.connect(host=db_sql_server_ip, # your host, usually localhost
user=db_user, # your username
passwd=db_pw, # your password
db=db_db_name) # name of the data base
# you must create a Cursor object. It will let
# you execute all the queries you need
cur = db.cursor()
# Use all the SQL you like
cur.execute("SELECT * FROM users")
# print all the first cell of all the rows
for row in cur.fetchall():
print(row[0])
db.close()
解决方案
推荐阅读
- node.js - 使用带有 Node.js 后端的 Angular 应用程序进行 Google 登录
- .htaccess - 无法在 htaccess 或 robots.txt 中阻止 AspiegelBot
- ionic-framework - @ionic/cli 安装后未安装
- c# - 资产“大纲效应”的重加工
- oracle-apex - 当前 apex 版本中的 Oracle Apex 选项卡(旧版)替代方案
- karate - 如何在 karate-config.js 文件中配置空手道 afterScenario
- php - 如何使用最新的作曲家安装旧版本的 Laravel (5.7)
- python - 在scrapy中间件中实例化数据库连接并在其他模块中访问
- android-intent - 在第三方前台应用程序上单击特定像素和后退按钮的后台应用程序
- r - 根据位于多个用户选择的选项中的至少一个来填充选择列表