
目次
はじめに
Windows 上の PySide2 でデータベース接続しようとしたところ、ドライバはインストールされているのに driver not loaded なるエラーが発生してしまう現象に遭遇しました。無事解決できましたので、その時の記録を記事にしました。
環境
- OS: Windows10
- PySide2: 5.11.0a1.dev1528474042-5.11.1
- MYSQL Driver: MySQL Connector C 6.1
QSqlDatabase.addDatabase を実行してみる
PySide2 でデータベースを取り扱うためには、まず addDatabase で接続を確立します。 (詳しくは、こちら)
1 2 |
from PySide2.QtSql import QSqlDatabase db = QSqlDatabase.addDatabase('QMYSQL') |
コンソールに下記エラーが出力されてしまいました。
1 2 3 |
QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins |
QApplication のインスタンスを事前に生成する
3行目から、QCoreApplication のインスタンスが必要である事が分かりますので、下記のように QApplication を生成するようにします。
1 2 3 4 5 |
import sys from PySide2.QtWidgets import QApplication from PySide2.QtSql import QSqlDatabase app = QApplication(sys.argv) db = QSqlDatabase.addDatabase('QMYSQL') |
実行するとまだエラーが発生します。
1 2 |
QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 |
1行目は変わりませんが、2行目は available drivers が具体的に並んでいて、 QMYSQL が有効であることはわかります。PySide2 のインストールディレクトリを調べてみると plugins\sqldrivers フォルダに下記 dll が配置されていますので、上記 available drivers はこれらの dll を反映しているものと思われます。
1 2 3 4 |
qsqlite.dll qsqlmysql.dll qsqlodbc.dll qsqlpsql.dll |
ではなぜ driver not loaded なのか?
上記 qsqlmysql.dll はネイティブの MYSQL ドライバ (libmysql.dll) を参照するようです。
確認したところ、私の環境では C:\Program Files\MySQL\MySQL Connector C 6.1\lib にインストールされていました。
libmysql.dll にパスを通す
qsqlmysql.dll が libmysql.dll を見つけられるように、libmysql.dll へのパスを追加してみます。
あらためて先ほどのスクリプトを実行したところ、エラー無く実行する事が出来ました。
最後に
結論は単純で、Windows 上の PySide2 で MySQL を扱うためには、libmysql.dll にパスを通しておく必要があるという事です。
実は Linux 上でも driver not loaded が発生しているのですが、こちらは参照の問題を解消しただけでは解決できていません。解決できたら記事にします。