«Драйвер не загружен» при попытке подключиться к базе данных SQL в pyqt5 с python 3.7 (x64) - PullRequest
0 голосов
/ 12 ноября 2019

Я пытаюсь преобразовать старую программу pyqt4 в pyqt5 и перейти на python x64.

При первом обращении к БД я получаю «Драйвер не загружен» ошибка.

Когда я использую mysql.connector.connect, я могу без проблем получать данные из БД.

Я пробовал последние четыре ночи, чтобы решить эту проблему, и на данный момент не знаю ни одногодалее.

То, что я пробовал:

  • установлен qt
  • установить 32-битный питон
  • скачать winpython, который включает pyqt
  • удаление всего python в системе переустановка
  • установленный mysql / и соединитель
  • пробовал anaconda

Я считаю, что одна из моих проблем заключается в том, что печать (QtSql. QSqlDatabase.drivers ()) только дает мне: ['QSQLITE', 'QODBC', 'QODBC3', 'QPSQL', 'QPSQL7']

В соответствующей папке (насколько я понимаю) "C: \ Python37 \ Lib \ site-packages \ PyQt5 \ Qt \ plugins \ sqldrivers "- это только следующие три файла: qsqlite.dll, qsqlodbc.dll, qsqlpsql.dll

Я скачал файл qsqlmysql.dll из https://raw.githubusercontent.com/pyqt/python-qt5/master/PyQt5/plugins/sqldrivers/, после этого «QMYSQL» и «QMYSQL3» отображаются с печатью (QtSql.QSqlDatabase.drivers ()), нос этим файлом мой питон сильно падает.

Что я могу попробовать дальше? Что я делаю не так?

База данных "Сервер-версия: 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...