PyQt4(PyQt5)访问mysql或Postgres

1、安装qt4,qt5python

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

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

减压后sql

python configure.py (或python数据库

make&sudo make install测试

3、安装mysql的sqldriversui

默认状况下qt只有SQLite驱动,其它驱动要本身安装:编码

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

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

4、对于安装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运行异常

5、测试代码

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(固然数据库的链接信息确定要改过来)

相关文章
相关标签/搜索