PyQt4(PyQt5)访问mysql或Postgres

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、安装qt4,qt5

二、安装sip及PyQt(建议源码编译安装)

下载sip-4.17.tar.gz、PyQt-gpl-5.5.1.tar.gz

减压后

python configure.py (或python

make&sudo make install

三、安装mysql的sqldrivers

默认情况下qt只有SQLite驱动,其它驱动要自己安装:

sudo apt-get install libqt4-sql-mysql  libqt5sql5-mysql

sudo apt-get install libqt4-sql-psql  libqt5sql5-psql

四、对于安装MATLAB的系统可能出现动态链接库版本问题

如import QtPy模块时出错

>>> from PyQt4.QtQtSql import *

Traceback (most recent call last):

  File "", line 1, in

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运行异常

五、测试代码

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_())

Postgres

只需把

    db=QSqlDatabase.addDatabase("QMYSQL")

QMYSQL改为QPSQL(当然数据库的连接信息肯定要改过来)

转载于:https://my.oschina.net/u/2245781/blog/638751

你可能感兴趣的:(c/c++,数据库,matlab)