pyqt4連接mysql數(shù)據(jù)庫的方法:
創(chuàng)新互聯(lián)公司專注于企業(yè)網絡營銷推廣、網站重做改版、六合網站定制設計、自適應品牌網站建設、H5高端網站建設、商城網站定制開發(fā)、集團公司官網建設、外貿網站制作、高端網站制作、響應式網頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為六合等各大城市提供網站開發(fā)制作服務。
原料: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的系統(tǒng)可能出現(xiàn)動態(tài)鏈接庫版本問題
如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
然后把鏈接改到系統(tǒng)庫下
/opt/local/MATLAB/R2012a/bin/glnxa64/libQtSql.so.4 - /usr/lib/x86_64-linux-gnu/libQtSql.so.4.8.6
我的系統(tǒng)里QtCore、QtGui、QtOpenGL、QtNetwork等都有問題、需要以上操作。修改后未發(fā)現(xiàn)MATLAB運行異常
3、測試代碼
mysql
#-*- coding: utf-8 -*-
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtSql import *
import sys
#創(chuàng)建數(shù)據(jù)庫連接
def createConnection():
#選擇數(shù)據(jù)庫類型,這里為mysql數(shù)據(jù)庫
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
#打開數(shù)據(jù)庫
#打開數(shù)據(jù)庫
if (db.open()):
print ("Success")
else:
print ("Failed to connect to mysql")
#創(chuàng)建表
def createTable():
#創(chuàng)建QsqlQuery對象,用于執(zhí)行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")
#這一步應該是執(zhí)行查詢的操作
self.select()
#數(shù)據(jù)更新的策略,詳細可以查看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_())
測試完成,連接成功。
在這里小編使用的是SQLyogEnt進行遠程連接配置了SSH的數(shù)據(jù)庫。通過桌面的SQLyogEnt運行數(shù)據(jù)庫客戶端。
在界面中點擊【新建】按鈕,在Mysql下填寫Mysql數(shù)據(jù)庫的ip地址、用戶名、密碼、端口(默認在3306)就好,數(shù)據(jù)庫名稱。這里跟普通的連接數(shù)據(jù)庫的方法一致。
這個時候讀者可以點擊一下【測試連接】,這個時候點擊測試連接去連接數(shù)據(jù)庫是不會成功的,因為數(shù)據(jù)庫配置了SSH訪問。如下圖:
配置完成Mysql信息后,在旁邊選擇【SSH】
1: windows 下登陸mysql 命令行,(1)進入cmd (2) cd mysql 安裝路徑/mysqlserver5.6/bin (3) 使用命令mysql -u root -p 然后根據(jù)提示輸入密碼 進入命令行 select user(); //顯示當前用戶 2: 在同一臺電腦上利用Qt 訪問數(shù)據(jù)庫 (1)顯示當前電腦上安裝的數(shù)據(jù)庫驅動 QStringList drivers = QSqlDatabase::drivers(); foreach(QString driver, drivers) qDebug() "/t" driver; (2)QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");/對 QMYSQL進行操作,本函數(shù) 有第二個參數(shù) 連接名 db.setHostName("localhost");//或127.0.0.1 本主機 db.setPort(3306); db.setDatabaseName("example"); //對數(shù)據(jù)庫example進行操作 db.setUserName("wangxuetao"); //wangxuetao是一個對example數(shù)據(jù)庫有操作權限的賬戶 db.setPassword("3791948"); 于是mysql中增加一個賬戶可使用 Grant all previliges on *.* to ‘wangxuetao’@’localhost’ identified by ‘3791948’ with grant option; Flush privileges; //更新 (3)db.open() 函數(shù)可由于檢測數(shù)據(jù)庫是否連接成功 coutDBConnection(); 2. m_sqlquery = new QSqlQuery("",m_sqldb);//statement 1:connect db with sql query 3. if(result == R_OK) 4. { 5. result = m_sqlquery-exec("INSERT INTO children(fname,age) VALUES('A nn2',13)"); 6. if(!result) 7. qDebug()" [OK] ""EXEC successed"; 8. m_sqlquery-exec("SELECT * FROM children c LIMIT 0,1000"); 9. while(m_sqlquery-next()) 10. { 11. qDebug()value(0).toString()value(1). toString(); 12. } 13. }