Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

PySide2 पर QMYSQL ड्राइवर लोड करने में असमर्थ

<उप>इस उत्तर में न केवल लिनक्स के लिए बल्कि अन्य ओएस के लिए इंस्टॉलेशन शामिल है, इसके अलावा यह pyqt5 के लिए भी लागू होता है

Qt द्वारा उपयोग की जाने वाली बायनेरिज़ वही हैं जिनका उपयोग PyQt5/PySide2 द्वारा किया जाता है क्योंकि वे समान बेस कोड का उपयोग करते हैं इसलिए आपको प्लगइन्स को संकलित करना होगा।

इस मामले में, mysql प्लगइन को संकलित करने के लिए आपको आधिकारिक मैनुअल का पालन करना होगा , जो संक्षेप में है:

  1. निर्भरता स्थापित करें, इस मामले में mysql-connector-c
  2. उसी संस्करण का Qt इंस्टॉल करें जिसके साथ pyqt5/pyside2 संकलित किया गया था और विकास उपकरण जैसे विंडोज़ पर MSVC, Ubuntu पर बिल्ड-एसेंशियल, MacOS पर XCode, आदि।
  3. स्रोत कोड डाउनलोड करें, इस मामले में qtbase रिपॉजिटरी
  4. प्लगइन संकलित करें।

क्यूटी के संस्करण का पता लगाने के लिए जिस संस्करण के साथ पुस्तकालय संकलित किया गया था, उसका उपयोग किया जा सकता है:

  • PyQt5
python -c "from PyQt5.QtCore import QT_VERSION_STR; print('Qt version', QT_VERSION_STR)"
  • पायसाइड2
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'))"
  • पायसाइड2:
python -c "import os; from PySide2.QtCore import QLibraryInfo; print('QT_SQL_DRIVER_PATH', os.path.join(QLibraryInfo.location(QLibraryInfo.PrefixPath), 'plugins', 'sqldrivers'))"

सभी मामलों को कवर करने के लिए मैंने एक जीथब एक्शन बनाया है जो बायनेरिज़ उत्पन्न करता है:

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

पिछला कोड प्लगइन उत्पन्न करता है जिसे आप यहां पा सकते हैं। ।

उबंटू के विशिष्ट मामले में इसे घटाया जा सकता है:

  • कॉपी करें QT_SQL_DRIVER_PATH पर फ़ाइल करें।
  • निष्पादित करें sudo apt install libmysqlclient-dev

विंडोज़ के विशिष्ट मामले में इसे घटाया जा सकता है:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. .NET कोर 2.1 पहचान सभी उपयोगकर्ताओं को उनकी संबंधित भूमिकाओं के साथ मिलती है

  2. डेटाबेस में तालिकाओं के लिए MySQL तालिका का आकार कैसे प्राप्त करें?

  3. MySQL संग्रहीत कार्यविधियाँ

  4. MySQL में JSON सरणी को पंक्तियों में बदलें

  5. अजगर स्क्रैपी में एक पंक्ति में मेरे एसक्यूएल में डालने के लिए सूची को स्ट्रिंग में बदलें