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/
该文件下载地址:
下载好该文件,解压,发在文件夹
/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环境下如何修改的更多相关文章
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)
源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...
- WebApi接口 - 如何在应用中调用webapi接口
很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...
- discuz云平台报调用远程接口失败的问题分析和解决
根据网络两篇文章整理 问题描述:当开通或关闭某个云平台服务的时候,报如下错误信息:调用远程接口失败.请检查您的服务器是否处于内网以及您服务器的防火墙设置. 云平台测试站点的接口文件正常,于是开始在文件 ...
- 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)
如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样) python标准库中的subprocess可以解决这个问题. from subprocess ...
- 全世界最详细的图形化VMware中linux环境下oracle安装(二)【weber出品必属精品】
<ORACLE 10.2.05版本的升级补丁安装> 首先我们解压 $ unzip p8202632_10205_LINUX.zip 解压后我们会发现多出了个文件夹,他是:Disk1,进入D ...
- 【数据库】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 ( ...
- windows和linux环境下java调用C++代码-JNI技术
最近部门做安卓移动开发的需要调C++的代码,困难重重,最后任务交给了我,查找相关资料,没有一个教程能把不同环境(windows,linux)下怎么调用说明白的,自己在实现的过程中踩了几个坑,在这里总结 ...
- linux环境下,使用Navicat连接mysql时,提示本地IP无法连接虚拟环境下的mysql解决方案
在Linux环境下,使用Navicat连接mysql时,提示本地IP无法连接虚拟环境下的mysql,提示如下: 而导致连接错误的原因是MYSQL没有开启远程登录权限. 解决方案: 在mysql命令中执 ...
- 全世界最详细的图形化VMware中linux环境下oracle安装(一)【weber出品必属精品】
安装流程:前期准备工作--->安装ORACLE软件--->安装升级补丁--->安装odbc创建数据库--->安装监听器--->安装EM <前期准备工作> 安装 ...
随机推荐
- Python自动发送邮件-smtplib和email库
''' 一.先导入smtplib模块 导入MIMEText库用来做纯文本的邮件模板 二.发邮件几个相关的参数,每个邮箱的发件服务器不一样,以163为例子百度搜索服务器是 smtp.163.com 三. ...
- 【转】Deep Learning(深度学习)学习笔记整理系列之(四)
九.Deep Learning的常用模型或者方法 9.1.AutoEncoder自动编码器 Deep Learning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结 ...
- VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)
鸡啄米在上一讲中介绍了MFC的消息映射机制,属于原理方面的知识.对于VC++编程入门学习者来说可能有些抽象,鸡啄米会把消息映射的知识渗透到后面的教程中.本节开始为大家讲解偏应用的知识-创建对话框. 对 ...
- HUE配置文件hue.ini 的zookeeper模块详解(图文详解)(分HA集群)
不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...
- java 读CSV 和 Excel
1.csv和excel读写对比 开发中经常遇到数据导入和导出功能,csv 和 excel是最常见的数据格式,本文比较了下csv和excel读写相同数据的效率: 测试数据格式一 用上面模板数据生成的测试 ...
- impress.js初体验——前端装X利器
impress.js 是国外一位开发者受 Prezi 启发,采用 CSS3 与 JavaScript 语言完成的一个可供开发者使用的表现层框架(演示工具).其功能包括画布的无限旋转与缩放,任意角度放置 ...
- springboot属性类自动加载配置文件中的值
springboot属性类自动加载配置文件中的值,如Person类加载在yml中配置的name,age等属性值,可以通过如下步骤获取: 类上添加@ConfigurationProperties注解,p ...
- Solidity 官方文档中文版 1_简介
简介 Solidity是一种语法类似JavaScript的高级语言.它被设计成以编译的方式生成以太坊虚拟机代码.在后续内容中你将会发现,使用它很容易创建用于投票.众筹.封闭拍卖.多重签名钱包等等的合约 ...
- hdu 1163 九余数定理
Eddy's digital Roots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- HTML字符转码
以下是HTML特殊字符的编码表: 标记 编码 实际名称 ™ ™ € € Space ! ! " " " # # $ $ % % & & & ' ...