sql >> データベース >  >> RDS >> Mysql

PySide2にQMYSQLドライバーをロードできません

    この回答は、Linuxのインストールだけでなく、他のOSのインストールにも当てはまりますが、pyqt5にも適用されます

    Qtで使用されるバイナリは、同じベースコードを使用するため、プラグインをコンパイルする必要があるため、PyQt5/PySide2で使用されるものと同じです。

    この場合、mysqlプラグインをコンパイルするには、公式マニュアルに従う必要があります。 、要約すると:

    1. 依存関係をインストールします。この場合は、mysql-connector-c をインストールします。
    2. pyqt5 / pyside2がコンパイルされたのと同じバージョンのQtと、Windows上のMSVC、Ubuntuのビルドエッセンシャル、MacOSのXCodeなどの開発ツールをインストールします。
    3. ソースコードをダウンロードします。この場合は、qtbaseリポジトリ をダウンロードします。 。
    4. プラグインをコンパイルします。

    ライブラリがコンパイルされたバージョンのQtのバージョンを確認するには、以下を使用できます。

    • PyQt5
    python -c "from PyQt5.QtCore import QT_VERSION_STR; print('Qt version', QT_VERSION_STR)"
    
    • PySide2
    python -c "from PySide2.QtCore import qVersion; print('Qt version', qVersion())"
    

    上記は、OSに応じてlibqsqlmysql.so、qsqlmysql.dll、またはlibqsqlmysql.dylibを生成します。そのファイルはパスに貼り付ける必要があります:

    • PyQt5:
    python -c "import os; from PyQt5.QtCore import QLibraryInfo; print('QT_SQL_DRIVER_PATH', os.path.join(QLibraryInfo.location(QLibraryInfo.PrefixPath), 'plugins', 'sqldrivers'))"
    
    • PySide2:
    python -c "import os; from PySide2.QtCore import QLibraryInfo; print('QT_SQL_DRIVER_PATH', os.path.join(QLibraryInfo.location(QLibraryInfo.PrefixPath), 'plugins', 'sqldrivers'))"
    

    すべてのケースをカバーするために、バイナリを生成するGithubアクションを作成しました:

    mysql_plugin.yml

    name: generate_mysql_plugin
    
    on: [push]
    
    jobs:
      ci:
        name: ${{ matrix.os.name }} Qt-${{ matrix.qt.qt_version }}
        runs-on: ${{ matrix.os.runs-on }}
        strategy:
          fail-fast: false
          matrix:
            os:
              - name: Windows
                extension: "dll"
                runs-on: windows-2019
              - name: Linux
                extension: "so"
                runs-on: ubuntu-20.04
              - name: MacOS
                extension: "dylib"
                runs-on: macos-10.15
            qt:
              - name: 5.15
                qt_version: 5.15.0
        steps:
          - name: Checkout
            uses: actions/[email protected]
          - name: Install Qt
            uses: jurplel/[email protected]
            with:
              version: ${{ matrix.qt.qt_version }}
              dir: ${{ github.workspace }}/qt/
          - name: clone qtbase
            run: git clone -b ${{ matrix.qt.qt_version }} https://code.qt.io/qt/qtbase.git
          - name: Compile mysql plugin on Windows
            if: matrix.os.name == 'Windows'
            shell: cmd
            run: |
              choco install wget
              wget https://downloads.mysql.com/archives/get/p/19/file/mysql-connector-c-6.1.11-winx64.zip
              unzip mysql-connector-c-6.1.11-winx64.zip
              copy /y "mysql-connector-c-6.1.11-winx64\lib\libmysql.dll" .
              call "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
              cd qtbase/src/plugins/sqldrivers
              qmake -- MYSQL_INCDIR="${{ github.workspace }}\mysql-connector-c-6.1.11-winx64\include" MYSQL_LIBDIR="${{ github.workspace }}\mysql-connector-c-6.1.11-winx64\lib"
              nmake sub-mysql
              nmake install
          - name: Compile mysql plugin on Linux
            if: matrix.os.name == 'Linux'
            run: |
              wget https://downloads.mysql.com/archives/get/p/19/file/mysql-connector-c-6.1.11-linux-glibc2.12-x86_64.tar.gz
              tar zxvf mysql-connector-c-6.1.11-linux-glibc2.12-x86_64.tar.gz
              sudo cp mysql-connector-c-6.1.11-linux-glibc2.12-x86_64/lib/*.so /usr/lib/x86_64-linux-gnu
              sudo apt-get install freetds-dev
              cd qtbase/src/plugins/sqldrivers
              qmake
              cd mysql
              qmake
              make
              make install
          - name: Compile mysql plugin on MacOS
            if: matrix.os.name == 'MacOs'
            run: |
              brew install wget
              wget https://cdn.mysql.com/archives/mysql-connector-c/mysql-connector-c-6.1.11-macos10.12-x86_64.tar.gz
              tar zxvf mysql-connector-c-6.1.11-macos10.12-x86_64.tar.gz
              sudo cp mysql-connector-c-6.1.11-macos10.12-x86_64/lib/libmysqlclient.dylib mysql-connector-c-6.1.11-macos10.12-x86_64/lib/libmysqlclient_r.dylib
              sudo cp mysql-connector-c-6.1.11-macos10.12-x86_64/lib/libmysqlclient.18.dylib mysql-connector-c-6.1.11-macos10.12-x86_64/lib/libmysqlclient_r.18.dylib
    
              sudo cp mysql-connector-c-6.1.11-macos10.12-x86_64/lib/*.dylib /usr/local/lib
              cd qtbase/src/plugins/sqldrivers
              qmake -- MYSQL_PREFIX="${{ github.workspace }}/mysql-connector-c-6.1.11-macos10.12-x86_64"
              make sub-mysql
              cd mysql
              make install
          - name: upload
            uses: actions/[email protected]
            with:
              path: qtbase/src/plugins/sqldrivers/plugins/sqldrivers/*qsqlmysql.${{ matrix.os.extension }}
              name: mysqlplugin-${{ matrix.os.name }}-Qt${{ matrix.qt.name }}
    

    前のコードは、ここ にあるプラグインを生成します。 。

    Ubuntuの特定のケースでは、次のように減らすことができます。

    • libqsqlmysql.so をコピーします ファイルをQT_SQL_DRIVER_PATHに追加します。
    • sudo apt install libmysqlclient-devを実行します

    Windowsの特定のケースでは、次のように減らすことができます。




    1. Oracle SQLを使用して、1つの出力日数と曜日をどのように出力しますか?

    2. SQLおよびPL/SQLでの文字列の反転例

    3. T-SQLで日付から年を取得する方法

    4. 同じサーバー上の複数のデータベース間でクエリを実行する