PyQt 4(PyQt 5)mysqlまたはPostgresへのアクセス

2852 ワード

一、qt 4,qt 5をインストールする
二、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をQSQLに変更(もちろんデータベースの接続情報は必ず変更します)