PyQt5 - Veritabanı Yönetimi
PyQt5 kitaplığı şunları içerir: QtSqlmodül. Birçok SQL tabanlı veritabanı ile iletişim kurmak için ayrıntılı bir sınıf sistemidir. OnunQSqlDatabasebir Bağlantı nesnesi aracılığıyla erişim sağlar. Şu anda mevcut SQL sürücülerinin listesi aşağıdadır -
Sr.No. | Sürücü Tipi ve Açıklaması |
---|---|
1 | QDB2 IBM DB2 |
2 | QIBASE Borland InterBase Sürücüsü |
3 | QMYSQL MySQL Sürücüsü |
4 | QOCI Oracle Çağrı Arabirimi Sürücüsü |
5 | QODBC ODBC Sürücüsü (Microsoft SQL Server içerir) |
6 | QPSQL PostgreSQL Sürücüsü |
7 | QSQLITE SQLite sürüm 3 veya üstü |
8 | QSQLITE2 SQLite sürüm 2 |
Misal
Bu bölüm için, statik yöntem kullanılarak bir SQLite veritabanıyla bağlantı kurulur -
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('sports.db')
QSqlDatabase sınıfının diğer yöntemleri aşağıdaki gibidir -
Sr.No. | Yöntemler ve Açıklama |
---|---|
1 | setDatabaseName() Bağlantının arandığı veritabanının adını belirler. |
2 | setHostName() Veritabanının kurulu olduğu ana bilgisayarın adını belirler |
3 | setUserName() Bağlantı için kullanıcı adını belirtir |
4 | setPassword() Varsa bağlantı nesnesinin parolasını ayarlar |
5 | commit() İşlemleri tamamlar ve başarılı olursa doğru döndürür |
6 | rollback() Veritabanı işlemini geri alır |
7 | close() Bağlantıyı kapatır |
QSqlQueryclass, SQL komutlarını yürütmek ve işlemek için işlevselliğe sahiptir. Hem DDL hem de DML tipi SQL sorguları çalıştırılabilir. İlk adım, aşağıdaki ifadeleri kullanarak SQlite veritabanı oluşturmaktır -
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('sportsdatabase.db')
Ardından, Sorgu nesnesini elde edin. QSqlQuery() yöntemini seçin ve yürütülecek SQL ifadesini içeren bir dizeyi bağımsız değişken olarak alan en önemli yöntemi exec_ () 'yi çağırın.
query = QtSql.QSqlQuery()
query.exec_("create table sportsmen(id int primary key, " "firstname varchar(20), lastname varchar(20))")
Aşağıdaki komut dosyası, beş kayıtla doldurulmuş bir sporcu tablosu içeren bir SQLite veritabanı sports.db oluşturur.
import sys
from PyQt5.QtSql import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def createDB():
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('sportsdatabase.db')
if not db.open():
msg = QMessageBox()
msg.setIcon(QMessageBox.Critical)
msg.setText("Error in Database Creation")
retval = msg.exec_()
return False
query = QSqlQuery()
query.exec_("create table sportsmen(
id int primary key, ""firstname varchar(20), lastname varchar(20))")
query.exec_("insert into sportsmen values(101, 'Roger', 'Federer')")
query.exec_("insert into sportsmen values(102, 'Christiano', 'Ronaldo')")
query.exec_("insert into sportsmen values(103, 'Ussain', 'Bolt')")
query.exec_("insert into sportsmen values(104, 'Sachin', 'Tendulkar')")
query.exec_("insert into sportsmen values(105, 'Saina', 'Nehwal')")
return True
if __name__ == '__main__':
app = QApplication(sys.argv)
createDB()
SQLite veritabanının sporcu tablosuna eklenen yukarıdaki kayıtlarla oluşturulduğunu doğrulamak için, adlı bir SQLite Gui yardımcı programı kullanın. SQLiteStudio.
QSqlTableModelPyQt'daki class, tek bir tablodaki kayıtları okumak ve yazmak için düzenlenebilir veri modeli sağlayan yüksek seviyeli bir arayüzdür. Bu model, birQTableViewnesne. Kullanıcıya herhangi bir üst düzey pencereye yerleştirilebilen kaydırılabilir ve düzenlenebilir bir görünüm sunar.
Bir QSqlTableModel nesnesi aşağıdaki şekilde bildirilir -
model = QtSql.QSqlTableModel()
Düzenleme stratejisi aşağıdakilerden herhangi birine ayarlanabilir -
QSqlTableModel.OnFieldChange | Tüm değişiklikler hemen uygulanacaktır |
---|---|
QSqlTableModel.OnRowChange | Kullanıcı farklı bir satır seçtiğinde değişiklikler uygulanacak |
QSqlTableModel.OnManualSubmit | Tüm değişiklikler, submitAll () veya revertAll () çağrılana kadar önbelleğe alınacaktır. |
Misal
Aşağıdaki örnekte sporcu masası bir model olarak kullanılmış ve strateji şu şekilde ayarlanmıştır -
model.setTable('sportsmen')
model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
model.select()
QTableView sınıfı, PyQt'daki Model / Görünüm çerçevesinin bir parçasıdır. QTableView nesnesi aşağıdaki gibi oluşturulur -
view = QtGui.QTableView()
view.setModel(model)
view.setWindowTitle(title)
return view
Bu QTableView nesnesi ve iki QPushButton parçacığı, en üst düzey QDialog penceresine eklenir. Ekle düğmesinin () sinyali, model tablosunda insertRow () işlemini gerçekleştiren addrow () 'a bağlanır.
button.clicked.connect(addrow)
def addrow():
print model.rowCount()
ret = model.insertRows(model.rowCount(), 1)
print ret
Silme düğmesiyle ilişkili Yuva, kullanıcı tarafından seçilen bir satırı silen bir lambda işlevini yürütür.
btn1.clicked.connect(lambda: model.removeRow(view1.currentIndex().row()))
Kodun tamamı aşağıdaki gibidir -
import sys
from PyQt5.QtSql import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def initializeModel(model):
model.setTable('sportsmen')
model.setEditStrategy(QSqlTableModel.OnFieldChange)
model.select()
model.setHeaderData(0, Qt.Horizontal, "ID")
model.setHeaderData(1, Qt.Horizontal, "First name")
model.setHeaderData(2, Qt.Horizontal, "Last name")
def createView(title, model):
view = QTableView()
view.setModel(model)
view.setWindowTitle(title)
return view
def addrow():
print (model.rowCount())
ret = model.insertRows(model.rowCount(), 1)
print (ret)
def findrow(i):
delrow = i.row()
if __name__ == '__main__':
app = QApplication(sys.argv)
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('sportsdatabase.db')
model = QSqlTableModel()
delrow = -1
initializeModel(model)
view1 = createView("Table Model (View 1)", model)
view1.clicked.connect(findrow)
dlg = QDialog()
layout = QVBoxLayout()
layout.addWidget(view1)
button = QPushButton("Add a row")
button.clicked.connect(addrow)
layout.addWidget(button)
btn1 = QPushButton("del a row")
btn1.clicked.connect(lambda: model.removeRow(view1.currentIndex().row()))
layout.addWidget(btn1)
dlg.setLayout(layout)
dlg.setWindowTitle("Database Demo")
dlg.show()
sys.exit(app.exec_())
Yukarıdaki kod aşağıdaki çıktıyı üretir -
Birkaç kayıt eklemeyi ve silmeyi deneyin ve işlemleri onaylamak için SQLiteStudio'ya geri dönün.