Unable to load QMYSQL Driver on PySide2 – Stack Overflow

Source: python – Unable to load QMYSQL Driver on PySide2 – Stack Overflow

0

P.S. almost half of this info is officially published at https://doc.qt.io/qt-6/deployment-plugins.html

I use PySide6 on Windows 10 and %QT_SQL_DRIVER_PATH% does not work for me. What works for PySide6 is the %QT_PLUGIN_PATH% environment variable.

Let’s assume that you have built (or downloaded) a SQL driver for Qt platform into C:\projects\my-project-1\qt-plugins\sqldrivers, so that there is qsqlmysql.dll there.

CASE #1: you execute QSqlDatabase.addDatabase("QMYSQL"), but you get the following error:

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QPSQL

It means that qsqlmysql.dll (a plugin for Qt platform) was not found.

The fix is to define the environment variable %QT_PLUGIN_PATH% and put qsqlmysql.dll into %QT_PLUGIN_PATH%/sqldrivers/. You can even do it in your Python script before invocation of QSqlDatabase.addDatabase:

os.environ['QT_PLUGIN_PATH'] = r'C:\projects\my-project-1\qt-plugins'

Note, qsqlmysql.dll must be a release version built using MSVC (64-bit since it is year 2022), not MinGW. Debug version fails by some reason in my experience.

If you don’t want to define the %QT_PLUGIN_PATH% environment variable, an alternative fix is to copy qsqlmysql.dll into one of these directories: <python-install-dir>/sqldrivers/ or <python-install-dir>/lib/site-packages/PySide6/plugins/sqldrivers/.

Another alternative is to use QCoreApplication.addLibraryPath like this:

    app = QCoreApplication(sys.argv)
    app.addLibraryPath(r'C:\projects\my-project-1\qt-plugins')

And yet another alternative is to create <python-install-dir>\qt.conf or <python-install-dir>\qt6.conf with following content:

[Paths]
Prefix=C:/projects/my-project-1
Plugins=qt-plugins

or even so:

[Paths]
Plugins=C:/projects/my-project-1/qt-plugins

N.B. qt6.conf is ignored if qt.conf doesn’t exist. If you use qt6.conf, you must create an empty qt.conf at least.


CASE #2: you execute QSqlDatabase.addDatabase("QMYSQL"), but you get the following error:

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QMARIADB QMYSQL QSQLITE QODBC QPSQL

It means that qsqlmysql.dll was found, but its dependencies were not. The qsqlmysql.dll additionally requires 3 DLLs: libmysql.dlllibcrypto-1_1-x64.dlllibssl-1_1-x64.dll. These DLLs must be located in %PATH% or in current directory.

N.B. if you place the DLLs near your python script, this won’t work if current working directory is different from scripts’s location. But you can modify %PATH% even in your Python script. For example, if you copied said DLLs into deps sub-directory of your project:

os.environ["PATH"] += os.pathsep + os.path.join(os.path.dirname(__file__), 'deps')

Another possible issues might be:

  • architecture mismatch (some DLLs are 64-bit, while others are 32-bit).
  • binary incompatibility – e.g. if “sqldrivers/qsqlmysql.dll” is built with MinGW or it’s a debug version downloaded from https://github.com/thecodemonkey86/

Define the environment variable: set QT_DEBUG_PLUGINS=1 – this might help to troubleshoot such issues.

Leave a Reply

The maximum upload file size: 500 MB. You can upload: image, audio, video, document, spreadsheet, interactive, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here