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(固然數據庫的鏈接信息確定要改過來)

相關文章
相關標籤/搜索