Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Không thể tải Trình điều khiển QMYSQL trên PySide2

Câu trả lời này không chỉ bao gồm cài đặt cho Linux mà còn cho hệ điều hành khác, bên cạnh đó nó cũng áp dụng cho pyqt5

Các mã nhị phân được Qt sử dụng giống với các mã được PyQt5 / PySide2 sử dụng vì chúng sử dụng cùng một mã cơ sở nên bạn sẽ phải biên dịch các plugin.

Trong trường hợp này, để biên dịch plugin mysql, bạn phải làm theo hướng dẫn chính thức , tóm lại là:

  1. Cài đặt các phần phụ thuộc, trong trường hợp này là mysql-connector-c
  2. Cài đặt Qt của cùng một phiên bản mà pyqt5 / pyside2 đã được biên dịch và các công cụ phát triển như MSVC trên windows, build-Essentials trên Ubuntu, XCode trên MacOS, v.v.
  3. Tải xuống mã nguồn, trong trường hợp này là kho qtbase .
  4. Biên dịch plugin.

Để tìm ra phiên bản Qt với phiên bản mà thư viện được biên dịch, có thể sử dụng cách sau:

  • 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())"

Ở trên tạo libqsqlmysql.so, qsqlmysql.dll hoặc libqsqlmysql.dylib tùy thuộc vào hệ điều hành. Tệp đó phải được dán vào đường dẫn:

  • 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'))"

Để đề cập đến tất cả các trường hợp, tôi đã tạo Hành động trên Github để tạo các tệp nhị phân:

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 }}

Mã trước đó tạo plugin mà bạn có thể tìm thấy tại đây .

Trong trường hợp cụ thể của Ubuntu, nó có thể được giảm xuống:

  • Sao chép libqsqlmysql.so gửi tới QT_SQL_DRIVER_PATH.
  • Thực thi sudo apt install libmysqlclient-dev

Trong trường hợp cụ thể của Windows, nó có thể được giảm xuống:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP:Truy xuất hình ảnh từ MySQL Blob trực tiếp vào thẻ <img>

  2. MySQL INTERVAL Mins

  3. Sự cố MySQL Innodb

  4. Cách thiết lập MySQL Replication trong RHEL, Rocky và AlmaLinux

  5. Làm cách nào để buộc đăng xuất khỏi tất cả người dùng đối với một trang web?