• PyQt5 中调用MySql接口失败 ( QSqlDatabase 组件) 在Linux环境下如何修改


    最近在跑下面这么一个代码,怎么跑都无法连通服务器,如下:

    # -*- coding: utf-8 -*-
    
    '''
        【简介】
        PyQt5中  处理database 例子
       
      
    '''
    
    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtSql import QSqlDatabase  
    
    class ExecDatabaseDemo(QWidget):
    
        def __init__(self, parent=None):
            super(ExecDatabaseDemo , self).__init__(parent)
            
            #self.db = QSqlDatabase.addDatabase('QSQLITE')
            #self.db.setDatabaseName('./db/database.db')
            # 打开数据库
            #self.db.open()
            
            self.con2 = QSqlDatabase.addDatabase('QMYSQL')
            self.con2.setHostName("67.209.xxx.xxx")
            self.con2.setDatabaseName("mysql")
            self.con2.setUserName("root")
            self.con2.setPassword("xxxxxxxx")
            a=self.con2.open()
            print(a)
    
        def closeEvent(self, event):
            # 关闭数据库
            self.con2.close()
        
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        demo = ExecDatabaseDemo()
        demo.show()
        sys.exit(app.exec_())
            

    这个代码不管怎么跑总是无法连通服务器端的数据库,在Windows平台下搞了快一天还是没有搞定,这就想起来使用Linux弄一下,毕竟我还是用LInux比较上手。

    在Windows平台下跑不通但是不报错,也没有任何提示,但是在Linux平台下就不一样了,有报错信息,如下:

    报错信息如下:

    QSqlDatabase: QMYSQL driver not loaded
    QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7

    这个提示还是比较有用的,依据这个提示我在网上进行了一下搜索,还真有一些解答方法。

    网上一般都是先使用这么一个步骤,如下:

    ldd libqsqlmysql.so(ldd用来打印程序或者库文件所依赖的共享库列表)

    于是在我的电脑上查找该文件:

    sudo find / -name libqsqlmysql.so

    最终发现了两个地方,一个是Python下面的PyQt5中, 一个是在  /usr/lib 下面,显而易见的是第一个文件便是我们要查找的文件。

    ldd命令用于打印程序或者库文件所依赖的共享库列表

    然后,查找该文件的共享库列表,直接感觉这个问题应该是共享库上有缺失。

    ldd /usr/local/lib/python3.5/dist-packages/PyQt5/Qt/plugins/sqldrivers/libqsqlmysql.so

    输出如下:

        linux-vdso.so.1 =>  (0x00007ffc533af000)
        libQt5Sql.so.5 => /usr/local/lib/python3.5/dist-packages/PyQt5/Qt/plugins/sqldrivers/../../lib/libQt5Sql.so.5 (0x00007faed77c2000)
        libQt5Core.so.5 => /usr/local/lib/python3.5/dist-packages/PyQt5/Qt/plugins/sqldrivers/../../lib/libQt5Core.so.5 (0x00007faed7072000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007faed6e55000)
        libmysqlclient.so.18 => not found
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007faed653f000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007faed6236000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007faed6020000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007faed5c56000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007faed5a3c000)
        libicui18n.so.56 => /usr/local/lib/python3.5/dist-packages/PyQt5/Qt/plugins/sqldrivers/../../lib/libicui18n.so.56 (0x00007faed55a3000)
        libicuuc.so.56 => /usr/local/lib/python3.5/dist-packages/PyQt5/Qt/plugins/sqldrivers/../../lib/libicuuc.so.56 (0x00007faed51eb000)
        libicudata.so.56 => /usr/local/lib/python3.5/dist-packages/PyQt5/Qt/plugins/sqldrivers/../../lib/libicudata.so.56 (0x00007faed3808000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007faed3604000)
        libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007faed3402000)
        libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007faed30f1000)
        /lib64/ld-linux-x86-64.so.2 (0x00007faed7c1d000)
        libssl.so.10 => not found
        libcrypto.so.10 => not found
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007faed2e81000)

    可以看到,上面显示一个有三个共享库是无法查找到的。

    首先,就是要找到  libmysqlclient.so.18.0  文件。   查找整个电脑中的文件,没有该文件。

    于是,就需要在网上 下载 这个文件   libmysqlclient.so.18.0   

    在 CSDN  上发现了这个文件,不过苦于没有积分于是继续寻找。

    最后,在  这个网站上发现了文件, 网站:https://rpm.pkgs.org/

    该文件下载地址:

    http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/x86_64/RPMS.classic/libmysqlclient18-10.1.30-alt1.S1.x86_64.rpm

    下载好该文件,解压,发在文件夹

      /usr/lib/x86_64-linux-gnu/      下面,再次查看 libqsqlmysql.so  动态链接库列表,发现:

    证明此时  libmysqlclient.so.18.0     这个动态链接库已经可以加载上了。

    然后就是解决另两个  动态链接库的问题了。

    根据网上的信息需要继续安装东西,不知道是否正确,就直接安装了,步骤如下:

    sudo apt-get install openssl
    sudo apt-get install libssl1.0.0 libssl-dev

    然后在电脑上查找这两个文件,发现还是找不到。

    不停的尝试中, 试了如下操作,

    ldd /usr/bin/openssl

    发现了神奇的事情,如下:

        linux-vdso.so.1 =>  (0x00007ffd75316000)
        libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f279141c000)
        libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f2790fd8000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2790c0e000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2790a0a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2791685000)

    从上面发现,  libssl.so.10  he   libcrypto.so.10   应该就是  libssl.so.1.0.0   和   libcrypto.so.1.0.0

    于是便进行了如下操作:

    sudo ln -s /lib/x86_64-linux-gnu/libssl.so.1.0.0 /lib/x86_64-linux-gnu/libssl.so.10

    sudo ln -s /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /lib/x86_64-linux-gnu/libcrypto.so.10

    全部搞定后,运行我们的数据库连接文件,结果如下:

    证明 PyQt5  下使用   QSqlDatabase  也可以连接MySql数据库。

    最终发现其实PyQt5上默认是不带  MySQL驱动的,而它所调用的MySQL驱动其实主要是调用  MySQL的CLient部分的共享库。

  • 相关阅读:
    【转】C#中判断扫描枪输入与键盘输入
    根据名称分组,选择最大日期和最小日期的数据,并显示在一行上
    C#如何判断我的程序已经有一个实例正在运行
    消息队列篇
    Redis面试笔记(二)雪崩、穿透、击穿三连问
    MySQL基础
    Redis面试笔记(一)
    Java多线程(二)
    Java多线程(一)
    Elastic Search之布尔查询
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/9102422.html
Copyright © 2020-2023  润新知