サイドバーの「Django ドキュメント検索」というプレースホルダの入った検索では、Django ドキュメント (Django 2.1) の公式サイト内を検索できます
PySide2 + MySQL で driver not loaded が発生する(Windows編)

目次

はじめに

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 で接続を確立します。 (詳しくは、こちら)

from PySide2.QtSql import QSqlDatabase
db = QSqlDatabase.addDatabase('QMYSQL')

コンソールに下記エラーが出力されてしまいました。

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers:
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins

QApplication のインスタンスを事前に生成する

3行目から、QCoreApplication のインスタンスが必要である事が分かりますので、下記のように QApplication を生成するようにします。

import sys
from PySide2.QtWidgets import QApplication
from PySide2.QtSql import QSqlDatabase
app = QApplication(sys.argv)
db = QSqlDatabase.addDatabase('QMYSQL')

実行するとまだエラーが発生します。

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 を反映しているものと思われます。

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.dlllibmysql.dll を見つけられるように、libmysql.dll へのパスを追加してみます。

あらためて先ほどのスクリプトを実行したところ、エラー無く実行する事が出来ました。

最後に

結論は単純で、Windows 上の PySide2 で MySQL を扱うためには、libmysql.dll にパスを通しておく必要があるという事です。

実は Linux 上でも driver not loaded が発生しているのですが、こちらは参照の問題を解消しただけでは解決できていません。解決できたら記事にします。

参考

QSqlDatabase — Qt for Python (Technology Preview)

低価格なのに高速・多機能・高セキュリティ 月額400円(税別)から最大容量100GB WordPress専用高速サーバー Z.com WP
おすすめの記事