大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
QSqlDatabase: QMYSQL driver not loaded
创新互联是一家专注于成都网站建设、网站设计与策划设计,江华网站建设哪家好?创新互联做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:江华等地区。江华做网站价格咨询:13518219792
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
这里需要把libmysql.dll文件拷贝到Qt的bin目录中。或者自己编译的时候,链接静态库。
参考:
参考:
在这里小编使用的是SQLyogEnt进行远程连接配置了SSH的数据库。通过桌面的SQLyogEnt运行数据库客户端。
在界面中点击【新建】按钮,在Mysql下填写Mysql数据库的ip地址、用户名、密码、端口(默认在3306)就好,数据库名称。这里跟普通的连接数据库的方法一致。
这个时候读者可以点击一下【测试连接】,这个时候点击测试连接去连接数据库是不会成功的,因为数据库配置了SSH访问。如下图:
配置完成Mysql信息后,在旁边选择【SSH】
pyqt4连接mysql数据库的方法:
原料:sip-4.17.tar.gz、PyQt-gpl-5.5.1.tar.gz安装包
下载后解压缩到用户目录。
键入以下命令:
python configure.py (或python)
makesudo make install
1、安装mysql的sqldrivers
默认情况下qt只有SQLite驱动,其它驱动要自己安装:
sudo apt-get install libqt4-sql-mysql libqt5sql5-mysql
sudo apt-get install libqt4-sql-psql libqt5sql5-psql
2、对于安装MATLAB的系统可能出现动态链接库版本问题
如import QtPy模块时出错
from PyQt4.QtQtSql import *
Traceback (most recent call last):
File "stdin", line 1, in module
ImportError: /opt/local/MATLAB/R2012a/bin/glnxa64/QtSql.so.4: undefined symbol: _ZN31
locate QtSql.so
然后把链接改到系统库下
/opt/local/MATLAB/R2012a/bin/glnxa64/libQtSql.so.4 - /usr/lib/x86_64-linux-gnu/libQtSql.so.4.8.6
我的系统里QtCore、QtGui、QtOpenGL、QtNetwork等都有问题、需要以上操作。修改后未发现MATLAB运行异常
3、测试代码
mysql
#-*- coding: utf-8 -*-
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtSql import *
import sys
#创建数据库连接
def createConnection():
#选择数据库类型,这里为mysql数据库
db=QSqlDatabase.addDatabase("QMYSQL")
db.setDatabaseName("you_db")
db.setHostName("localhost") #set address
db.setUserName("you_usr"); #set user name
db.setPassword("you_passwd"); #set user pwd
#打开数据库
#打开数据库
if (db.open()):
print ("Success")
else:
print ("Failed to connect to mysql")
#创建表
def createTable():
#创建QsqlQuery对象,用于执行sql语句
q=QSqlQuery()
q.exec_("create table if not exists t1 (f1 integer primary key,f2 varchar(20))")
q.exec_("delete from t1")
#这里使用 u 将字符串转换成unicode编码,解决中文乱码
q.exec_(u"insert into t1 values(1,'我')")
q.exec_(u"insert into t1 values(2,'我')")
q.exec_("commit")
class Model(QSqlTableModel):
def __init__(self,parent):
QSqlTableModel.__init__(self,parent)
#设置要载入的表名
self.setTable("t1")
#这一步应该是执行查询的操作
self.select()
#数据更新的策略,详细可以查看Qt文档
self.setEditStrategy(QSqlTableModel.OnManualSubmit)
class TestWidget(QWidget):
def __init__(self):
QWidget.__init__(self)
vbox=QVBoxLayout(self)
self.view=QTableView()
self.model=Model(self.view)
self.view.setModel(self.model)
vbox.addWidget(self.view)
if __name__=="__main__":
a=QApplication(sys.argv)
createConnection()
createTable()
w=TestWidget()
w.show()
sys.exit(a.exec_())
测试完成,连接成功。
Qt项目里用到了mysql,运行后报错:
查阅资料知道需要配置mysql驱动,本以为几分钟解决的事情,没想到开启了恶魔经历,整整两天时间,mmp!
Stop! 废话别说啦,入正题:
首先,Qt mysql的安装和环境配置就略了,一搜一大把。
不过注意两点:
先进入到/Users/ing/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers目录下,执行:
这里确保qmake用的qt里的就行
其实你可以配置下qt相关的环境变量,在bash_profile里添加:
然后,source ~/.bash_profile ,还有别忘了 source ~/.zshrc
执行成功的话会输出:
根据提示 依次执行:
make sub-mysql
make
make install
进入/Users/ing/Qt5.14.2/5.14.2/clang_64/plugins/sqldrivers下执行,查看链接库:
输出:
此时,运行qt程序 依旧报错。
根据查阅的资料,问题出在
网友们所说的“诡异”的路径那一行(你的输出可能和我的不一样的,但问题应该一样) ,也就是有 libmysqlclient.21.dylib 这行。
另外查了下 @repath 的含义 意思是说 不能明确的指向。。。所以 这里就需要将libmysqlclient.21.dylib 指向扳到正确的道路。
方法就是利用 install_name_tool -change
执行
这里一定要注意顺序,刚开始我就是顺序搞错了,死活就是不行,最后跑到官方论坛里用蹩脚的英语发帖求教也无果,最后还是一遍的重试,一遍的检查才发现的。一天就这么浪费了。
此刻在运行qt程序 ,就不会再报上面的错误了。
撒花,礼花搞起~~~
首先:进入到自己相应的qt/src/plugins/sqldrivers/mysql 目录下 (我的目录为:S:\QT\4.8.0\src\plugins\sqldrivers\mysql),这个下面有两个文件mysql.pro,一个mian.cpp! 用文本编辑器打开该目录下的mysql.pro文件 在mysql.pro中加入:
INCLUDEPATH+="C:\Program Files\MySQL\MySQL Server 5.5\include" LIBS+="C:\Program Files\MySQL\MySQL Server 5.5\lib\libmysql.lib"
保存并退出(即你的mysql的include 路径和 lib 下 opt 的 libmysql.lib 路径)
打开Qt 4.8.0 Command Prompt, 编译这个文件
#qmake -o Makefile mysql.pro
提示3条警告信息,但没影响
#mingw32-make (这个网上有好几个编译命令,我的是用nmake);
然后你会发现你的 qt 下这个 qt/plugins/sqldrivers路径(我的路径为S:\QT\4.8.0\plugins\sqldrivers下)下多了四个文件
分别为 libqsqlmysql4.a, libqsqlmysqld4.a, qsqlmysql4.dll,qsqlmysqld4.dll (生成文件不一定是上面四个)这样基本上就编译成功,可以使用 mysql 了!~
最后安全起见再将 mysql下 bin 文件中libmysql.dll文件拷贝到 system32 下面 然后测试:
#includeQtGui #includeQtSql #includecstdlib
#includeQtGui/QApplication #includeQtSql/QtSql boolcreateConnection() {
qDebug()"Availabledrivers:";
QStringListdrivers=QSqlDatabase::drivers(); foreach(QStringdriver,drivers) qDebug()"\t"driver;
QSqlDatabasedb=QSqlDatabase::addDatabase("QMYSQL"); qDebug()"MYSQLdrivervalid?"db.isValid(); }
intmain(intargc,char*argv[]) {
至于mysql.pro我是在网上下载的