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.