PyQt5 - डेटाबेस हैंडलिंग
PyQt5 लाइब्रेरी में है QtSqlमापांक। यह कई एसक्यूएल आधारित डेटाबेस के साथ संवाद करने के लिए एक विस्तृत वर्ग प्रणाली है। आईटी इसQSqlDatabaseएक कनेक्शन वस्तु के माध्यम से पहुँच प्रदान करता है। निम्नलिखित वर्तमान में उपलब्ध SQL ड्राइवरों की सूची है -
अनु क्रमांक। | ड्राइवर का प्रकार और विवरण |
---|---|
1 |
QDB2 आईबीएम DB2 |
2 |
QIBASE बोरलैंड इंटरबेस ड्राइवर |
3 |
QMYSQL MySQL ड्राइवर |
4 |
QOCI ओरेकल कॉल इंटरफ़ेस ड्राइवर |
5 |
QODBC ODBC ड्राइवर (Microsoft SQL सर्वर शामिल है) |
6 |
QPSQL PostgreSQL ड्राइवर |
7 |
QSQLITE SQLite संस्करण 3 या उससे ऊपर |
8 |
QSQLITE2 SQLite संस्करण 2 |
उदाहरण
इस अध्याय के लिए, SQLite डेटाबेस के साथ एक कनेक्शन स्थैतिक विधि का उपयोग करके स्थापित किया गया है -
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('sports.db')
QSqlDatabase class के अन्य तरीके इस प्रकार हैं -
अनु क्रमांक। | तरीके और विवरण |
---|---|
1 |
setDatabaseName() उस डेटाबेस का नाम सेट करता है जिसके साथ कनेक्शन मांगा गया है |
2 |
setHostName() उस होस्ट का नाम सेट करता है जिस पर डेटाबेस स्थापित है |
3 |
setUserName() कनेक्शन के लिए उपयोगकर्ता नाम निर्दिष्ट करता है |
4 |
setPassword() यदि कोई हो तो कनेक्शन ऑब्जेक्ट का पासवर्ड सेट करता है |
5 |
commit() लेनदेन को पूरा करता है और सफल होने पर सही रिटर्न देता है |
6 |
rollback() डेटाबेस लेनदेन को वापस रोल करता है |
7 |
close() कनेक्शन बंद कर देता है |
QSqlQueryक्लास में SQL कमांड को निष्पादित और हेरफेर करने की कार्यक्षमता है। डीडीएल और डीएमएल दोनों प्रकार के एसक्यूएल प्रश्नों को निष्पादित किया जा सकता है। पहला कदम निम्नलिखित बयानों का उपयोग करके SQlite डेटाबेस बनाना है -
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('sportsdatabase.db')
इसके बाद, क्वेरी ऑब्जेक्ट को प्राप्त करें QSqlQuery() पद्धति और इसके सबसे महत्वपूर्ण तरीके को exec_ () कहते हैं, जो कि एक तर्क के रूप में लिया जाता है जिसमें SQL कथन को निष्पादित किया जाता है।
query = QtSql.QSqlQuery()
query.exec_("create table sportsmen(id int primary key, " "firstname varchar(20), lastname varchar(20))")
निम्न स्क्रिप्ट पाँच रिकॉर्ड के साथ आबादी वाले स्पोर्ट्सपर्सन की तालिका के साथ SQLite डेटाबेस sports.db बनाता है।
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 डेटाबेस बनाया गया है, नामक SQLite Gui उपयोगिता का उपयोग करें SQLiteStudio।
QSqlTableModelPyQt में कक्षा एक उच्च-स्तरीय इंटरफ़ेस है जो एकल तालिका में रिकॉर्ड पढ़ने और लिखने के लिए संपादन योग्य डेटा मॉडल प्रदान करता है। इस मॉडल का उपयोग पॉप्युलेट करने के लिए किया जाता हैQTableViewवस्तु। यह उपयोगकर्ता को एक स्क्रॉल करने योग्य और संपादन योग्य दृश्य प्रस्तुत करता है जिसे किसी भी शीर्ष स्तर की खिड़की पर रखा जा सकता है।
एक QSqlTableModel ऑब्जेक्ट को निम्न तरीके से घोषित किया जाता है -
model = QtSql.QSqlTableModel()
इसकी संपादन रणनीति निम्नलिखित में से किसी में भी सेट की जा सकती है -
QSqlTableModel.OnFieldChange | सभी परिवर्तनों को तुरंत लागू किया जाएगा |
---|---|
QSqlTableModel.OnRowChange | जब उपयोगकर्ता एक अलग पंक्ति का चयन करता है तो परिवर्तन लागू किए जाएंगे |
QSqlTableModel.OnManualSubmit | सभी परिवर्तनों को तब तक कैश किया जाएगा जब तक कि सब सबमिट नहीं करेंगे () या रिवर्ट () को कहा जाता है |
उदाहरण
निम्नलिखित उदाहरण में, स्पोर्ट्सपर्सन टेबल का उपयोग एक मॉडल के रूप में किया जाता है और रणनीति निम्नानुसार सेट की जाती है -
model.setTable('sportsmen')
model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
model.select()
क्यूटेबल व्यू वर्ग PyQt में मॉडल / व्यू फ्रेमवर्क का हिस्सा है। QTableView ऑब्जेक्ट निम्नानुसार बनाया गया है -
view = QtGui.QTableView()
view.setModel(model)
view.setWindowTitle(title)
return view
यह qableableView ऑब्जेक्ट और दो QPushButton विजेट्स शीर्ष स्तर QDialog विंडो में जोड़े जाते हैं। ऐड बटन पर क्लिक () सिग्नल एड्रो से जुड़ा हुआ है () जो मॉडल टेबल पर इन्सर्ट रो () करता है।
button.clicked.connect(addrow)
def addrow():
print model.rowCount()
ret = model.insertRows(model.rowCount(), 1)
print ret
डिलीट बटन से जुड़ा स्लॉट एक लैंबडा फ़ंक्शन को निष्पादित करता है जो एक पंक्ति को हटाता है, जिसे उपयोगकर्ता द्वारा चुना जाता है।
btn1.clicked.connect(lambda: model.removeRow(view1.currentIndex().row()))
पूरा कोड इस प्रकार है -
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_())
उपरोक्त कोड निम्नलिखित आउटपुट का उत्पादन करता है -
कुछ रिकॉर्ड जोड़ने और हटाने का प्रयास करें और लेनदेन की पुष्टि करने के लिए SQLiteStudio पर वापस जाएं।