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

# -*- 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部分的共享库。

PyQt5 中调用MySql接口失败 ( QSqlDatabase 组件) 在Linux环境下如何修改的更多相关文章

  1. PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)

    源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...

  2. WebApi接口 - 如何在应用中调用webapi接口

    很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...

  3. discuz云平台报调用远程接口失败的问题分析和解决

    根据网络两篇文章整理 问题描述:当开通或关闭某个云平台服务的时候,报如下错误信息:调用远程接口失败.请检查您的服务器是否处于内网以及您服务器的防火墙设置. 云平台测试站点的接口文件正常,于是开始在文件 ...

  4. 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)

    如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样) python标准库中的subprocess可以解决这个问题. from subprocess ...

  5. 全世界最详细的图形化VMware中linux环境下oracle安装(二)【weber出品必属精品】

    <ORACLE 10.2.05版本的升级补丁安装> 首先我们解压 $ unzip p8202632_10205_LINUX.zip 解压后我们会发现多出了个文件夹,他是:Disk1,进入D ...

  6. 【数据库】4.0 MySQL入门学习(四)——linux系统环境下MySQL安装

    1.0 我的操作系统是CentOS Linux release 7.6.1810  (Core) 系统详细信息如下: Linux version 3.10.0-957.1.3.el7.x86_64 ( ...

  7. windows和linux环境下java调用C++代码-JNI技术

    最近部门做安卓移动开发的需要调C++的代码,困难重重,最后任务交给了我,查找相关资料,没有一个教程能把不同环境(windows,linux)下怎么调用说明白的,自己在实现的过程中踩了几个坑,在这里总结 ...

  8. linux环境下,使用Navicat连接mysql时,提示本地IP无法连接虚拟环境下的mysql解决方案

    在Linux环境下,使用Navicat连接mysql时,提示本地IP无法连接虚拟环境下的mysql,提示如下: 而导致连接错误的原因是MYSQL没有开启远程登录权限. 解决方案: 在mysql命令中执 ...

  9. 全世界最详细的图形化VMware中linux环境下oracle安装(一)【weber出品必属精品】

    安装流程:前期准备工作--->安装ORACLE软件--->安装升级补丁--->安装odbc创建数据库--->安装监听器--->安装EM <前期准备工作> 安装 ...

随机推荐

  1. C++ lamda、function、bind使用

    参考资料: http://blog.csdn.net/augusdi/article/details/11771699 lambda 表达式的简单语法如下:[capture] (parameters) ...

  2. C#检查文件是否被占用

    第一种方法: using System.IO; using System.Runtime.InteropServices; [DllImport("kernel32.dll")] ...

  3. (转)SQL Server 2008登录错误:无法连接到(local)的解决

    在一些朋友安装完SQL Server 2008之后大多会遇到连接出错的问题.特别对于我们这样的新手而言简直郁闷的要死,好不容易装玩了又出现了问题.此篇文章意在解决安装步骤没有问题,但安装后无法登录的问 ...

  4. Spring整合Mybatis 之分页插件使用

    [分页插件项目中的正式代码一共有个5个Java文件,这5个文件的说明如下] Page<E>[必须]:分页参数类,该类继承ArrayList,虽然分页查询返回的结果实际类型是Page< ...

  5. Ubuntu vim java 自动补全javacomeplete2

    一 安装vundle $ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim 默认安装在/.v ...

  6. 将flex页面嵌入到jsp页面中

    如果我们只需要用到Flex的一部分功能,例如播放器功能,我们可以单独把Flex页面嵌入到Jsp页面中.要想实现此功能,需要下载一个工程,将其覆盖在服务器根目录下即可.你可以在次下载:FlexModul ...

  7. word 杂记

    45.error和exception有什么区别? 答案:Error表示系统级的错误和程序不必处理的异常,我们无法处理它. Exception表示是可以捕捉或者需要程序进行处理的异常. 47.abstr ...

  8. 利用python统计代码行

    参加光荣之路测试开发班已三月有余,吴总上课也总问“ 咱们的课上了这么多次了大家实践了多少行代码了?”.这里是一个一脸懵逼的表情.该怎么统计呢?一个个文件数当然不可取,能用代码解决的事咱们坚决不动手.最 ...

  9. 辅助模块应用(auxiliary/scanner/portscan/tcp)

    实验步骤 创建msf所需的数据库 之前我们开启msf时下面总会出现一个红色的小减号,原来是因为没有和数据库键连接,于是首先我们要手动建立一个数据库... 使用命令来实现: service postgr ...

  10. Vim提示E325(锁机制)

    背景 用vim命令处理一些超大文件时,有时会遇到卡死现象,不得不强制退出.但是,再次用vim命令访问这个文件时,会出现“E325:ATTENTION”提示.如果不做处理,以后每次都会出现. 分析 经过 ...